Pandas数据帧在使用glob读取大量txt文件后进行连接,花费了无尽的时间



根据下面的代码,我正在尝试将一些50k的txt文件读取到pandas数据帧中。但这个过程仍在运行2个小时。有什么更好的方法可以加快速度吗?

folder_path = '/drive/My Drive/dataset/train'
file_list = glob.glob(folder_path + "/*.txt")

def read_clean_df(file_name) -> pd.DataFrame:
df = pd.read_fwf(file_name, header=None)
df = df.drop(df.index[19])    
df = df.T           
df.columns = df.iloc[0]
df = df[1:]
df.reset_index(drop=True, inplace=True)
return df

train_df = read_clean_df(file_list[0])
for file_name in file_list[1:len(file_list)]:
df = read_clean_df(file_name)
train_df = pd.concat([train_df, df], axis=0)
train_df.reset_index(drop=True, inplace=True)
print(train_df.head(30))

是的,重复调用concat很慢,这就是DataFrame.append被弃用的原因

相反,做

dfs = []
for file_name in file_list:
df = read_clean_df(file_name)
dfs.append(df)
train_df = pd.concat(dfs)

在末尾进行一次串联:

dfs = []
for file_name in file_list:
df = read_clean_df(file_name)
dfs.append(df)
tran_df = pd.concat(dfs, axis=0)

如果速度不够快,请使用datatable,它可以对csv文件进行多线程IO读取:

df = dt.rbind(iread(file_list)).to_pandas()

最新更新