代码之家  ›  专栏  ›  技术社区  ›  Andrew

pandas值_计数到输出文件

  •  0
  • Andrew  · 技术社区  · 7 年前

    客观的

    我正在尝试为数据帧中的每一列自动生成一个EDA报告,从value_counts()开始。

    问题

    问题是我的函数不返回任何内容。因此,虽然它确实打印到控制台,但它不会将相同的输出打印到我的文本文件中。我使用它生成语法,然后在IDE中逐行运行它来查看所有变量,但这不是一个非常程序化的解决方案。

    笔记

    输出不必是.txt,但我认为这将是最容易的,同时让它工作。

    我试过了

    import pandas as pd
    
    def EDA(df, name):
    
        df.name = name  # name == string version of df
        print('#', df.name)
        for val in df.columns:
            print('# ', val, '\n', df[val].value_counts(dropna=False), '\n', sep='')
            print(df[val].value_counts(dropna=False))
    
    path = 'Data/nameofmyfile.csv'
    
    # name of df
    activeWD = pd.read_csv(path, skiprows=6)
    
    f = open('Output/outtext.txt', 'a+', encoding='utf-8')
    f.write(EDA(activeWD, 'activeWD'))
    f.close()
    

    也试过了

    1. print 具有 return

      定义EDA(df,名称):

          df.name = name  # name == string version of df
          print('#', df.name)
          for val in df.columns:
              print('# ', val, '\n', df[val].value_counts(dropna=False), '\n', sep='')
              return(df[val].value_counts(dropna=False))
      
    2. 从anaconda提示符运行文件

    这将导致以下编解码器错误:

    (base) C:\Users\auracoll\Analytic Projects\IDL Attrition>Python Syntax\newdatanewlife11.5.py >> Output.outtext.txt
    sys:1: DtypeWarning: Columns (3,16,39,40,41,42,49) have mixed types. Specify dtype option on import or set low_memory=False.
    Traceback (most recent call last):
      File "Syntax\newdatanewlife11.5.py", line 46, in <module>
        EDA(activeWD, name='activeWD')
      File "Syntax\newdatanewlife11.5.py", line 38, in EDA
        print(df[col].value_counts(dropna=False))
      File "C:\ProgramData\Anaconda3\lib\encodings\cp1252.py", line 19, in encode
        return codecs.charmap_encode(input,self.errors,encoding_table)[0]
    UnicodeEncodeError: 'charmap' codec can't encode characters in position 382-385: character maps to <undefined>
    

    我试过了 encoding='utf-8' encoding='ISO-8859-1' ,它们都不能解决这个问题。

    1. 我试图保存中间变量,它们返回none类型。

      testvar = for val in df.columns: df[val].value_counts(dropna=False)

    当我这样做时,testvar是内置模块的非类型对象

    1 回复  |  直到 7 年前
        1
  •  1
  •   Dascienz    7 年前

    命令行解决方案,尽管您可以按照注释者的建议使用纯python打印到文件。我发布此消息是因为您提到您已经尝试使用命令提示符,但无法将输出打印到文件中。所以,编辑你的剧本, filename.py

    import pandas as pd
    
    df = pd.DataFrame({'Pet':['Cat','Dog','Dog','Dog','Fish'],
                       'Color':['Blue','Blue','Red','Orange','Orange'],
                       'Name':['Henry','Bob','Mary','Doggo','Henry']})
    
    def EDA(df, name):
        df.name = name
        print('#{}\n'.format(df.name))
        for col in df.columns:
            print('#{}\n'.format(col))
            print(df[col].value_counts(dropna=False))
            print('\n')
    
    if __name__=='__main__':
        EDA(df, name='test')
    

    然后您应该能够运行: python filename.py > output.txt 在你的候机楼里。

    编辑

    为了子孙后代的利益,OP的问题不在于他们是如何打印到文件中的,而是他们的csv包含了不常见的字符 pandas.read_csv python 3.2 UnicodeEncodeError: 'charmap' codec can't encode character '\u2013' in position 9629: character maps to <undefined>

    chcp 65001
    set PYTHONIOENCODING=utf-8