我有100个数据帧(格式完全相同)保存在我的磁盘上作为100个pickle文件。这些数据帧大约每行250,000行。我想将1个数据帧中的所有100个数据帧保存到我的磁盘上作为1个pickle文件。
这就是我到目前为止所做的事情:
path = '/Users/srayan/Desktop/MyData/Pickle'
df = pd.DataFrame()
for filename in glob.glob(os.path.join(path, '*.pkl')):
newDF = pd.read_pickle(filename)
df = df.append(newDF)
df.to_pickle("/Users/srayan/Desktop/MyData/Pickle/MergedPickle.pkl")
我知道pickle会对数据框进行序列化,但我是否需要获取pickle文件,对其进行反序列化,附加数据框,然后再次序列化?或者有更快的方法吗?有了我拥有的所有数据,我的速度变慢了
答案 0 :(得分:1)
您可以使用list comprehension
将每个df
追加到list
,并且仅concat
追加一次:
files = glob.glob('files/*.pkl')
df = pd.concat([pd.read_pickle(fp) for fp in files], ignore_index=True)
与...相同:
dfs = []
for filename in glob.glob('files/*.pkl'):
newDF = pd.read_pickle(filename)
dfs.append(newDF)
df = pd.concat(dfs, ignore_index=True)
答案 1 :(得分:0)
df = pd.concat(map(pd.read_pickle, glob.glob(os.path.join(path, '*.pkl'))))