pandas value_counts в выходной файл - PullRequest
0 голосов
/ 14 ноября 2018

цель

Я пытаюсь автоматически сгенерировать отчет 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. различные версии замены 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))
    
  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 встроенного модуля

1 Ответ

0 голосов
/ 14 ноября 2018

Решение для командной строки, хотя вы, безусловно, можете печатать в файл, используя чистый 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 в вашем терминале.

EDIT

Ради потомков, проблема OP была не в том, как они печатали в файл, а в том, что их csv содержал необычные символы, которые pandas.read_csv испытывали проблемы с декодированием.Решение включало установку кодировки ввода / вывода python в UTF-8 перед запуском кода, как показано здесь: python 3.2 UnicodeEncodeError: кодек 'charmap' не может кодировать символ '\ u2013' в позиции 9629: символ отображается на

chcp 65001
set PYTHONIOENCODING=utf-8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...