簡體   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