Python Pandas根据日期从1个表创建5个excel文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python Pandas根据日期从1个表创建5个excel文件相关的知识,希望对你有一定的参考价值。

日期存储为日期时间。我不想硬编码日期。我希望脚本查找具有相同日期的列,将它们组合在一起并导出到文件名中包含日期的文件。

    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) 
答案

您可以尝试以下方法:

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)
另一答案

这与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("
")
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))

以上是关于Python Pandas根据日期从1个表创建5个excel文件的主要内容,如果未能解决你的问题,请参考以下文章

如何根据当前日期使用 python Pandas 从 Excel 工作表加载特定工作簿

根据星期时间统计日期总量,绘制matplotlib,pandas,Python

根据星期时间统计日期总量,绘制matplotlib,pandas,Python

如何从 Pandas 日期时间索引中删除尾随零(根据需要格式化)?

如何使用 Python/Pandas 从日期字段按月分组

使用 python、pandas 合并 2 个基于 3 个条件的单独 excel 文件