分割非常大的Pandas数据框,替代Numpy array_split

时间:2019-01-29 11:41:05

标签: python pandas numpy dataframe split

您对使用Numpy array_split方法的行数限制有何想法?

我有一个dataframe,行数超过6百万,并且希望将其分成20个左右的块。

我的尝试遵循以下内容: Split a large pandas dataframe

使用Numpy和array_split函数,但是它非常大dataframe会永远持续下去。

我的dataframe是df,其中包括8列和660万行。

df_split = np.array_split(df,20)

有什么其他方法可以分解这个想法吗?也欢迎使用其他技巧来提高数据框性能。

3 个答案:

答案 0 :(得分:1)

我没有一个通用的解决方案,但是您可以考虑两件事:

  1. 您可以尝试分块加载数据,而不是先加载然后拆分。如果使用pandas.read_csv,则可以使用skiprows参数。
  2. 您可以使用df.values.reshape((20,-1,8))重塑数据。但是,这需要将行数除以20。您可以考虑不使用最后一个样本(最多19个)来使其适合。当然,这将是最快的解决方案。

答案 1 :(得分:1)

也许可以通过将数据帧分成以下示例来解决您的问题:

import numpy as np
import pandas as pds

df = pds.DataFrame(np.random.rand(14,4), columns=['a', 'b', 'c', 'd'])

def chunker(seq, size):
    return (seq[pos:pos + size] for pos in range(0, len(seq), size))

for i in chunker(df,5):
    df_split = np.array_split(i, 20)
    print(df_split)

答案 2 :(得分:0)

对Houssem Maamria的代码进行一些修改,此文件可以帮助尝试将每个块导出到excel文件的人。

autogen.sh: line 2:  $`\r`: command not found
autogen.sh: line 16: $`\r`: command not found
autogen.sh: line 17: cd: $`.\r`: No such file or directory