我在一个pickle文件中存储了大约1200万个数据帧作为数据帧列表。我想将这些数据框串联起来,只有一个数据框。
我尝试了以下方法:
pd.concat这非常慢。
来自https://gist.github.com/TariqAHassan/fc77c00efef4897241f49e61ddbede9e的建议,大约需要24小时。
1的Python代码:
'''
from src.utils import load_pickle
data = load_pickle('the file path')
result = pd.concat(data)
'''
2的Python代码:
'''
def fast_flatten(input_list):
return list(chain.from_iterable(input_list))
COLUMN_NAMES = data[0].columns
df_dict = dict.fromkeys(COLUMN_NAMES, [])
for col in tqdm(COLUMN_NAMES):
extracted = (frame[col] for frame in data) # Use a generator to save memory
df_dict[col] = fast_flatten(extracted) # Flatten and save to df_dict
result = pd.DataFrame.from_dict(df_dict)[COLUMN_NAMES]
'''
最终结果的大小应为20000042乘47。
我将感谢您采用任何有效的方式来减少24小时的时间。
谢谢