python - pandas value_counts 输出文件

标签 python pandas output

目标

我正在尝试从 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()

也尝试过

  1. 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))
    
  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',但都没有解决此问题。

  • 我尝试保存中间变量,但它们不返回任何类型。

    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/

    相关文章:

    python - 无法将查询结果分配给 python 变量

    python - 没有 self 作为第一个参数的 python 方法

    python - 类型错误 : invalid type promotion while fitting a logistic regression model in Scikit-learn

    Python Pandas Lambda : Using multiple variables Lambda within DataFrame

    python - 用 python 中的变量替换链式方法

    java - 去除重复输出

    java - 异常处理和 IO

    python - 为什么等效的 Python 代码要慢得多

    Python - lxml 重新排序 xml 标签

    Python:输出顺序