熊猫value_counts以输出文件

时间:2018-11-14 16:51:34

标签: python pandas output

客观

我试图为dataframe中的每一列自动生成一个EDA报告,从value_counts()开始。

问题

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

笔记

一旦运行成功,我将为图形和df.describe()的输出添加一些语法,但是现在我什至无法获得所需的基础知识。

输出不一定必须是.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的各种版本

    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='')
            return(df[val].value_counts(dropna=False))
    
  2. 在anaconda提示符下运行文件

    Python语法\ newdataEDA.5.py >> Output.outtext.txt

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

(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. 我尝试保存中间变量,该中间变量不返回任何类型。

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

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

1 个答案:

答案 0 :(得分:1)

命令行解决方案,尽管您当然可以按照注释者的建议使用纯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的I / O编码设置为UTF-8,如下所示:python 3.2 UnicodeEncodeError: 'charmap' codec can't encode character '\u2013' in position 9629: character maps to <undefined>

chcp 65001
set PYTHONIOENCODING=utf-8