Предварительный итог (сумма, количество) каждого столбца кадра данных панд в CSV-файл - PullRequest
1 голос
/ 03 октября 2019

Я пытаюсь добавить сумму / сумму определенного столбца к кадру данных pandas перед записью его в файл csv. Я придумал действительно деликатное решение и подумал, может ли кто-нибудь предложить лучший подход.

`df.to_csv(out_path, index=False)
 #reading content of csv file
 with open(out_path,'r') as my_file:
     content = my_file.read()
 #adding comma in the line below adjust cell in csv file and appending content of pandas dataframe after writing aggregate total/sum. 
 with open(out_path,'w') as my_file:
     my_file.write(',,,,'+str(df['E'].count()))
     my_file.write(','+ str(df['F'].astype(float).sum()))
     my_file.write(',,,,,,,,,,,,,,'+ str(df['T'].astype(float).sum()))
     my_file.write('\n')
     my_file.write(content)`

Любая помощь будет оценена.

Примечание: Total должен быть в верхней части файла перед заголовком.

Я ожидаю следующий вывод:

Пример кадра данных

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Советы: Если вы не укажете путь к to_csv, функция вернет строку. Вы можете использовать эту строку для создания содержимого CSV вручную.

summary = df.agg({
    'E': 'count',
    'F': 'sum',
    'T': 'sum'
})
summary = summary.reindex(df.columns).to_frame().T

header = summary.to_csv(index=False, header=False)
body = df.to_csv(index=False)

with open(out_path, 'w') as f:
    f.write(header)
    f.write(body)

Теперь вам не нужно считать количество запятых!

0 голосов
/ 03 октября 2019

Вы можете сначала создать фрейм данных с информацией заголовка и записать его в CSV вместе с фреймом данных в режиме добавления:

import pandas as pd
df = pd.DataFrame([[2,4,6,2,3,9],[3,5,2,1,5,7],[4,6,8,9,0,4]], columns=list('ABCEFT'))

header = pd.Series(df.agg({'E': len, 'F': sum, 'T': sum}), index=df.columns).to_frame().T

with open(out_path, 'a') as f:
    header.to_csv(f, header=False, index=False)
    df.to_csv(f, index=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...