如何根据输入栏分别保存 csv

How can I save csv separately based on it's entry column

我试图在从 MONGODB 中提取数据帧后保存 csv 文件。

当我创建数据框时,它会根据其日期列生成每个数据框。

此外,更多数据框有一列 id,其中有 31 个不同的 ID 号。

我想单独保存我的 csv,在 csv 名称中包含 ID 号。

我之前使用 pandas:

以这种方式保存我的数据框
data = pd.DataFrame(energy_data)


for each_id in id_list:
    item = int(each_id)
    data.to_csv(os.path.join(dir, f'test_id_{item}.csv'), sep=',' )
                
# data is a dataframe I get it from MongoDB.

我的数据框如下所示(打印时显示 31 个单独的数据框):


datetimeAt            id.      total
2022-01-01 23:00:00   10121     1088030

.................
.................

datetimeAt            id.      total
2022-01-09 21:00:00   10023     1077030

................
................

datetimeAt            id.      total
2022-01-16 20:00:00   10024     1058030

..............
.................

datetimeAt            id.      total
2022-01-15 15:00:00   10012     108030
...................

当我 运行 我的代码时,我能够获得 31 个 csv 文件,但每个 csv 包含相同的数据信息,即当我从提取函数打印时的第一个数据帧。

所以我想根据 ID 号保存我的 csv,如下所示,以及与其 ID 号对应的信息。

test_id-10121.csv
test_id-10023.csv
test_id-10024.csv
test_id-10012.csv
.................

我能得到一些帮助吗?

谢谢

对于每个 id,您需要从主数据框中分离出一组数据并单独保存。

为此,您可以使用类似这样的东西。

for each_id in id_list:
    item = int(each_id)
    data_for_id = data[data['id.'] == item]
    data_for_id.to_csv(os.path.join(dir, f'test_id_{item}.csv'), sep=',' )

Pandas 擅长仅选择相关信息。您只需要做:

for each_id in id_list:
    item = int(each_id)
    data[data[id] == item].to_csv(os.path.join(dir, f'test_id_{item}.csv'), sep=',' )

可能是:

...
    data[data[id] == each_id].to_csv(os.path.join(dir, f'test_id_{item}.csv'), sep=',' )

如果 id 列不是数字...


但是如果你有一个大数据帧和相当多的 id 值,它就不会有效,因为你将为每个 id 值重复提取过程。 Pandas 方法是使用 grouby:

for item, df_item in df.groupby('id'):
    df_item.to_csv(os.path.join(dir, f'test_id_{item}.csv'), sep=',' )