Python Pandas создает 5 файлов Excel из 1 таблицы на основе даты - PullRequest
0 голосов
/ 20 марта 2019

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

    Account  |  datestart   |   Charge  |
   ----------+--------------+-----------+
    123A     |  2019-03-14  |   7299    |
    5866A    |  2019-03-14  |   4000    | 
    12321A   |  2019-03-14  |   5000    |
    312332A  |  2019-03-13  |   5000    |
    586A     |  2019-03-13  |   4000    |
    967567A  |  2019-03-13  |   5167.66 |
    3437A    |  2019-03-12  |   9187.2  |
    956734A  |  2019-03-12  |   4482    |
    36736A   |  2019-03-11  |   4101    |
    3567356A |  2019-03-10  |   4007.85 |
    9467A    |  2019-03-10  |   5097.18 |

Скрипт должен экспортировать в 5 файлов.Каждый из файлов будет включать только данные с определенной датой.

Например, первый файл должен выглядеть следующим образом:

    Account  |  datestart   |   Charge  |
   ----------+--------------+-----------+
    123A     |  2019-03-14  |   7299    |
    5866A    |  2019-03-14  |   4000    | 
    12321A   |  2019-03-14  |   5000    |

второй файл должен выглядеть следующим образом:

    Account  |  datestart   |   Charge  |
   ----------+--------------+-----------+
    312332A  |  2019-03-13  |   5000    |
    586A     |  2019-03-13  |   4000    |
    967567A  |  2019-03-13  |   5167.66 |

Первый файл должен быть сохранен как file_031419, а второй -file_031319.Данные, на которые я буду смотреть, будут иметь переменную дат, поэтому имена файлов должны быть динамическими в зависимости от дат в файле.

Вот часть кода, который я пробовал

filedates = list(none['datestart'].unique())

for date in filedates: 
   filename = 'File_'+list(set(pd.to_datetime(none.loc[idx, 'datestart']).dt.strftime('%m%d%y')))[0]+'.xlsx'
   none.loc[idx, 'datestart'].to_excel(filename) 

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

Вы можете попробовать следующее:

for i , g in df.groupby('datestart'):
    g.to_csv('C:\\path\\'+'file_'+ \
         g.datestart.dt.strftime('%y%m%d').astype(str).iloc[0] +'.csv',index=False)
1 голос
/ 20 марта 2019

Это не сильно отличается от anky_91, но имя файла совпадает с именем, заданным OP, и, возможно, его легче понять, учитывая, что однажды работая над маленькой функцией save_group, она очень гибкая

Сначала мы воспроизводим ваш самый набор данных

import pandas as pd


txt = """123A     |  2019-03-14  |   7299    |
    5866A    |  2019-03-14  |   4000    | 
    12321A   |  2019-03-14  |   5000    |
    312332A  |  2019-03-13  |   5000    |
    586A     |  2019-03-13  |   4000    |
    967567A  |  2019-03-13  |   5167.66 |
    3437A    |  2019-03-12  |   9187.2  |
    956734A  |  2019-03-12  |   4482    |
    36736A   |  2019-03-11  |   4101    |
    3567356A |  2019-03-10  |   4007.85 |
    9467A    |  2019-03-10  |   5097.18 |"""

txt = txt.split("\n")
txt = [t.split("|")[:-1] for t in txt]

df = pd.DataFrame(txt, columns=["Account", "datestart", "Charge"] )
for col in df.columns:
    df[col] = df[col].str.rstrip().str.lstrip()

df["datestart"] = df["datestart"].astype("M8[us]")  

Затем для каждой группы, которую вы хотите сохранить как CSV-файл

def save_group(grp):
    fn = grp["datestart"].dt.strftime('%m%d%y').astype(str).iloc[0]
    fn = "".join(["file_",fn, ".csv"])
    grp.to_csv(fn, index=False)

Чтобы использовать его для каждой группы, вы можете просто использовать apply

df.groupby("datestart").apply(lambda x: save_group(x))
...