Как прочитать файл из папки и применить Pivot к каждому файлу и записать Pivoted DataFrame в папку? - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть папка с CSV-файлами с таблицами в них.

Я подтвердил, что мне нужна моя сводная функция, и мне нужен следующий код:

cols = df.columns.difference(['FieldTitle','Value']).tolist()

pivoted_df = pd.pivot_table(df.fillna('missing'), index=cols, columns='FieldTitle', values='Value', aggfunc='first').reset_index().replace('missing', np.nan)

Как применить эти две строки кода к каждому файлу в папке при написании pivoted_df в другую папку?

Я попробовал этот код, но я не могу заставить панд прочитать файл для выполнения манипуляции:

import os
import pandas as pd
import numpy as np

directory = os.path.join('~/Desktop/folder_path')
for root,dirs,files in os.walk(directory):
    for file in files:
       if file.endswith(".csv"):
           f=open(file, 'r')
           for i in f:
               df = pd.read_csv(i)
               cols = df.columns.difference(['FieldTitle','Value']).tolist()
               pivoted_df = pd.pivot_table(df.fillna('missing'), index=cols, \
                                           columns='FieldTitle', values='Value', \
                                           aggfunc='first').\
                                           reset_index().replace('missing', np.nan)

               pivoted_df.to_csv('~/Desktop/folder_path/file_name_{}'.format(file))

           f.close()

1 Ответ

0 голосов
/ 27 сентября 2018

Вам нужно двойное '\' для окон, поэтому ваш путь будет "C: \\ Users \\ Person \\ Desktop \\ test"

Вам нужно объединить имя файла и путь, когда вы идетечтобы открыть это.

for root,dirs,files in os.walk(directory):
    for file in files:
       if file.endswith(".csv"):
           f=open(file, 'r')

Переменная file содержит только имя файла, а не полный путь.И, поскольку файл не находится в текущем рабочем каталоге, вам нужен путь.Решение состоит в том, чтобы изменить его на:

for root,dirs,files in os.walk(directory):
    for file in files:
       if file.endswith(".csv"):
           f = open(os.path.join(directory, file))

* os.path.join() объединяет каталог и имя файла, чтобы получить полный путь.

...