gpt4 book ai didi

python - Pandas - 将大数据框切成 block

转载 作者:太空狗 更新时间:2023-10-29 17:26:25 25 4
gpt4 key购买 nike

我有一个大数据帧(>3MM 行),我试图通过一个函数(下面的函数已大大简化),但我不断收到 Memory Error 消息。

我想我将太大的数据帧传递给函数,所以我尝试:

1) 将数据帧切成更小的 block (最好按AcctName 切片)

2) 将数据帧传递给函数

3) 将数据帧连接回一个大数据帧

def trans_times_2(df):
df['Double_Transaction'] = df['Transaction'] * 2

large_df
AcctName Timestamp Transaction
ABC 12/1 12.12
ABC 12/2 20.89
ABC 12/3 51.93
DEF 12/2 13.12
DEF 12/8 9.93
DEF 12/9 92.09
GHI 12/1 14.33
GHI 12/6 21.99
GHI 12/12 98.81

我知道我的函数可以正常工作,因为它适用于较小的数据框(例如 40,000 行)。我尝试了以下操作,但未能成功将小数据帧连接回一个大数据帧。

def split_df(df):
new_df = []
AcctNames = df.AcctName.unique()
DataFrameDict = {elem: pd.DataFrame for elem in AcctNames}
key_list = [k for k in DataFrameDict.keys()]
new_df = []
for key in DataFrameDict.keys():
DataFrameDict[key] = df[:][df.AcctNames == key]
trans_times_2(DataFrameDict[key])
rejoined_df = pd.concat(new_df)

我如何设想拆分数据帧:

df1
AcctName Timestamp Transaction Double_Transaction
ABC 12/1 12.12 24.24
ABC 12/2 20.89 41.78
ABC 12/3 51.93 103.86

df2
AcctName Timestamp Transaction Double_Transaction
DEF 12/2 13.12 26.24
DEF 12/8 9.93 19.86
DEF 12/9 92.09 184.18

df3
AcctName Timestamp Transaction Double_Transaction
GHI 12/1 14.33 28.66
GHI 12/6 21.99 43.98
GHI 12/12 98.81 197.62

最佳答案

您可以使用列表理解将数据框拆分为列表中包含的更小的数据框。

n = 200000  #chunk row size
list_df = [df[i:i+n] for i in range(0,df.shape[0],n)]

或者使用 numpy array_split,看这个 comment对于差异:

list_df = np.array_split(df, n)

您可以通过以下方式访问 block :

list_df[0]
list_df[1]
etc...

然后您可以使用 pd.concat 将其组装回一个数据帧。

按账户名

list_df = []

for n,g in df.groupby('AcctName'):
list_df.append(g)

关于python - Pandas - 将大数据框切成 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44729727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com