我试图为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()
将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))
在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'
,但都无法解决此问题。
我尝试保存中间变量,该中间变量不返回任何类型。
testvar = for val in df.columns:
df[val].value_counts(dropna=False)
当我这样做时,testvar是内置模块的NoneType对象
答案 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