是否有使用熊猫连接大型数据帧(40GB)的更快方法

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

我有3个40 GB的巨大数据帧,我使用块将其打开。现在,我想将它们连接在一起。这是我尝试过的:

    path = 'path/to/myfiles'
    files = [os.path.join(path,i) for i in os.listdir(path) if i.endswith('tsv')]
    for file in files:
        cols = ['col1','col2','col3']
        chunks = pd.read_table(file, sep='\t', names=cols, chunksize=10000000)

现在,当我尝试连接所有文件时,它会花很多时间。我想提出一些建议来更快地连接所有数据帧。

pandas performance memory concat
1个回答
0
投票

.tsv.csv是相当慢的读取/写入格式。我发现实木复合地板最适合我最终做的大多数事情。它的读写速度非常快,还使您可以轻松地将大块的文件文件夹作为单个表读回。它确实需要字符串列名称,但是:

In [102]: df = pd.DataFrame(np.random.random((100000, 100)), columns=[str(i) for i in range(100)])

In [103]: %time df.to_parquet("out.parquet")
Wall time: 980 ms

In [104]: %time df.to_csv("out.csv")
Wall time: 14 s

In [105]: %time df = pd.read_parquet("out.parquet")
Wall time: 195 ms

In [106]: %time df = pd.read_csv("out.csv")
Wall time: 1.53 s

如果您无法控制这些分块文件的格式,显然您需要至少一次读取它们的读取成本,但是从长远来看,转换它们仍然可以为您节省一些时间。许多其他读/写。

© www.soinside.com 2019 - 2024. All rights reserved.