快速加载 .txt 文件到 pandas df

问题描述 投票:0回答:2

这是我目前正在使用的代码,它工作正常并且完全符合我的要求。

df_list = []

for file_name in reversed (os.listdir(path)):
        df_small = pd.read_csv(os.path.join(path, file_name), delimiter='\t', decimal='.', skiprows=6)
        df_small = df_small.dropna(subset=[df_small.columns[6]])
        df_list.append(df_small)

df= pd.concat(df_list, ignore_index=True)
print(df)

我正在寻找让它更快的方法。目前我正在 df 中加载大约 5000 个文件,生成的 df 大约有 140 000 行,这个过程我需要大约 20 秒。 (所有文件都具有相同的布局和大约相同的大小 ca.7 kb)

那么有没有办法让它更快呢? 切换到像 dask 这样的东西来更快地读取数据是否有意义,或者是不必要的

python pandas dataframe optimization dask
2个回答
1
投票

你正在遍历文件。如果读取或加载占用了大部分时间,这种迭代方法就是你的瓶颈。

您可以使用一个 dask 包来分发文件路径并加载它们,无论您有多少可用的内核。


0
投票

文件足够小,使用常规流程并重构代码可能会更好:

def read_f(path):
    df_small = pd.read_csv(path, delimiter='\t', decimal='.', skiprows=6)
    df_small = df_small.dropna(subset=[df_small.columns[6]])
    return df_small

files = (os.path.join(path, file_name) for file_name in os.listdir(path))
df = pd.concat((read_f(path) for path in files), ignore_index=True)
© www.soinside.com 2019 - 2024. All rights reserved.