目标
我正在尝试从 value_counts() 开始,为数据框中的每一列自动生成 EDA 报告。
问题
问题是我的函数没有返回任何内容。因此,虽然它确实打印到控制台,但它不会将相同的输出打印到我的文本文件。我使用它只是生成语法,然后在 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, 名称):
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 df.columns 中的 val: df[val].value_counts(dropna=False)
当我这样做时,testvar是内置模块的NoneType对象
最佳答案
命令行解决方案,尽管您当然可以按照评论者的建议使用纯 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
关于python - pandas value_counts 输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53305155/