如何根据列值创建csv文件[重复]

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

我在 pandas 中有一个主数据集

usa_df
,看起来像这样

usa_df = {
    "state_name": ["Alabama", "Alabama", "Alaska", "Alaska", "Arkansas"],
    "persons": [1, 2, 1, 1, 1],
    "day_week": ["monday", "monday", "tuesday", "monday", "tuesday"]
}

数据集中大约有 20 万行,每个州名称出现数千行。每一行都是记录的犯罪,州名、人物和星期几是大约一百个数据点中的数据点)。

我有一个代码可以过滤特定州的 state_name 列,然后将其导出为 csv

state_df = usa_df[usa_df.state_name == "Alabama"]
state_df.reset_index(drop=True)
os.chdir("/path/to/file")
state_df.to_csv("./Alabama.csv", index=False)

这个方法工作得很好,但我正在尝试找到一种方法,可以自动为每个状态创建一个文件,而不必这样做五十次。

作为新人,除了将状态列表设置为

list[str]
之外,我不知道如何从这里继续,但除此之外我迷失了。是否可以为匹配特定状态的每一行自动创建所有 50 个文件?感谢您的帮助!

python pandas dataframe export-to-csv
1个回答
0
投票

一个快速而简单的解决方案是对所有唯一的状态名称使用

for
循环。您可以从数据框本身获取它们:

import pandas as pd

usa_df = {
    "state_name": ["Alabama", "Alabama", "Alaska", "Alaska", "Arkansas"],
    "persons": [1, 2, 1, 1, 1],
    "day_week": ["monday", "monday", "tuesday", "monday", "tuesday"]
}

usa_df = pd.DataFrame(usa_df)

for current_name in sorted(set(usa_df.state_name)):
    state_df = usa_df[usa_df.state_name == current_name]
    state_df.to_csv(f"/path/to/file/{current_name}.csv", index=False)

正如 @mozway 的评论中指出的,更有效的解决方案是使用分组,以免多次过滤数据帧:

import pandas as pd

usa_df = {
    "state_name": ["Alabama", "Alabama", "Alaska", "Alaska", "Arkansas"],
    "persons": [1, 2, 1, 1, 1],
    "day_week": ["monday", "monday", "tuesday", "monday", "tuesday"]
}

usa_df = pd.DataFrame(usa_df)

for current_name, current_group in usa_df.groupby("state_name"):
    current_group.to_csv(f"/path/to/file/{current_name}.csv", index=False)

另请注意:

  • 您不需要重置索引,因为无论如何您都可以使用
    index=False
    进行保存。
  • 您可以提供
    to_csv()
    方法的完整路径,而不是更改当前工作目录。
© www.soinside.com 2019 - 2024. All rights reserved.