Python -基于DATETIME列创建数据框的多个切片以导出到多个CSV文件

hmtdttj4  于 2023-04-03  发布在  Python
关注(0)|答案(1)|浏览(107)

我有一个主 Dataframe ,我试图使用df.loc将其切片为多个较小的 Dataframe ,并将这些切片基于datetime列,如下所示:

jan_2021 = merged_df.loc[(merged_df['Value_Date'] > '2021-1-1') & (merged_df['Value_Date'] <= '2021-1-31')]
feb_2021 = merged_df.loc[(merged_df['Value_Date'] > '2021-2-1') & (merged_df['Value_Date'] <= '2021-2-28')]
mar_2021 = merged_df.loc[(merged_df['Value_Date'] > '2021-3-1') & (merged_df['Value_Date'] <= '2021-3-31')]
apr_2021 = merged_df.loc[(merged_df['Value_Date'] > '2021-4-1') & (merged_df['Value_Date'] <= '2021-3-31')]

我需要继续这样做,直到2023年2月。有没有更快的方法在某种循环中迭代datetime列,而不是必须写出每个切片的每个datetime范围?
其次,我还想将每个切片 Dataframe 写入CSV文件。

jan_2021.to_csv(output_filepath_csv+'Jan21.csv',index=False)
feb_2021.to_csv(output_filepath_csv+'Feb21.csv',index=False)

同样,有没有一种方法可以循环遍历 Dataframe ?我猜是把它们放在一个列表中,然后循环遍历这个列表?

zpgglvta

zpgglvta1#

具有以下玩具 Dataframe :

import pandas as pd

df = pd.DataFrame(
    {
        "date": [
            "2021-1-1",
            "2021-1-2",
            "2021-2-3",
            "2021-2-7",
            "2021-3-11",
            "2021-4-19",
            "2021-4-22",
        ],
        "col1": [1, 3, 9, 4, 2, 8, 7],
        "col2": [4, 3, 7, 5, 4, 9, 1],
    }
)

以下是使用Pandas to_datetime和Python标准库的strptime和strftime的一种方法:

import datetime

# Add new columns "year" and "month"
df["date"] = pd.to_datetime(df["date"], format="%Y-%m-%d")
df["year"] = df["date"].apply(lambda x: x.year)
df["month"] = df["date"].apply(lambda x: x.month)

# Use a dict comprehension to slice dataframe
# keys: Jan21, Feb21, Mar21, Apr21
# Access slices like: dfs["Mar21"], for instance
dfs = {
    datetime.datetime.strptime(f"{year_and_month[0]}-{year_and_month[1]}", "%Y-%m")
    .strftime("%b%y"): sub_df.drop(columns=["year", "month"])
    .reset_index(drop=True)
    for year_and_month, sub_df in df.groupby(["year", "month"])
}

# Save to disk
for month, sub_df in dfs.items():
    sub_df.to_csv("path_to_dir" + f"/{month}.csv", index=False)

# In path_dir: Jan21.csv, Feb21.csv, Mar21.csv, Apr21.csv

相关问题