繁体   English   中英

熊猫value_counts输出文件

[英]pandas value_counts to output file

目的

我试图为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. 各种版本的用return替换print

    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对象

命令行解决方案,尽管您当然可以按照注释者的建议使用纯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'编解码器无法对位置9629处的字符'\\ u2013'进行编码:字符映射为<undefined>

chcp 65001
set PYTHONIOENCODING=utf-8

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM