作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个大数据帧(>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/
我有一堆大的 GeoTiff 文件(1.4GB,4 个纬度 x 8 个经度)。 我需要将每个瓷砖切成 1 度纬度 x 1 度长的瓷砖(每个瓷砖都只有一点点超龄)。 这是 GeoTiff 文件之一的 g
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
我是一名优秀的程序员,十分优秀!