将 Pandas 数据帧拆分为多个 csv 文件,将组保持在一起

时间:2021-02-09 20:05:53

标签: python python-3.x pandas

我有一个 100 万行的数据帧,其中包含以下内容: 我真的不知道具体的键列表,所以我不能说,在键 ABCDE 之后过滤。

键;值

A;1
A;2
B;3
B;4
B;5
C;6
C;7
D;8

我想将这个分成 3 个数据帧,将这些组保持在一起 所以结果应该是

A;1
A;2

B;3
B;4
B;5
C;6
C;7

D;8

所以我想拆分它,但它需要将组保持在一起, 例如,你不能这样做

A;1
A;2
B;3

B;4
B;5
C;6

C;7
D;8

所以我想在一组完成后拆分它。

我对 pandas groupby 函数进行了一些尝试,但是当您将所有组放在一起时,我不太确定如何进行拆分。

拆分可以是非常随机的,例如。每 1K 行 组需要在一起并不重要。

2 个答案:

答案 0 :(得分:0)

有几种方法,例如使用 groupby。这是一种方法。

import pandas as pd

df = pd.DataFrame({"key":["A","A","B","B","C","C","D","D"],
                   "value":[1,2,3,4,5,6,7,8]})

df.loc[df["key"] == "A", :].to_csv("filename_A.csv")
df.loc[(df["key"] == "B") | (df["key"] == "C"), :].to_csv("filename_BC.csv")
df.loc[df["key"] == "D", :].to_csv("filename_D.csv")

答案 1 :(得分:0)

您可以使用 numpy.array_split 来按组进行拆分,并在 Series.isinboolean indexing 中选择值:

N = 3
for i, key in enumerate(np.array_split(df['Key'].unique(), N)):
    print (key)
    df[df['Key'].isin(key)].to_csv(f'file{i}.csv', index=False)