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

问题描述 投票:0回答:1

我有一个主数据框,我正在尝试使用 df.loc 将这些切片分成多个较小的数据框,并将这些切片基于日期时间列,如下所示:

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 月。是否有更快的方法在某种循环中迭代日期时间列,而不必为每个切片写出每个日期时间范围?

其次,我还想将每个切片数据帧写入CSV文件。

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

再一次,有没有办法循环遍历数据帧?我猜想把它们放在一个列表中并循环遍历列表?

python pandas csv datetime slice
1个回答
0
投票

具有以下玩具数据框:

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
© www.soinside.com 2019 - 2024. All rights reserved.