Python写入字典会因大量数据而超时

时间:2017-02-12 13:03:13

标签: python pandas dictionary

我有一段工作代码,它读取pandas列并将其唯一值写入字典并将该值映射到整数。

问题在于它的计算效率太低,并且在它完成之前总是被杀死。 我有165列这样的列和每列300,000多行。

示例:

<span th:each="instrumentDescriptor, iterStat : ${instrument.instrumentDescriptors}" th:text="!${iterStat.last} ? ${instrumentDescriptor.instrumentVersion} + ', ': ${instrumentDescriptor.instrumentVersion}"></span>

工作但极其缓慢的代码永远无法完成:

my pandas dataframe df:
A      B 
cat   lion
dog   tiger
cat   tiger

my output dictionary:
dict['A'] = {'cat':1,'dog',2}
dict['B'] = {'lion':1,'tiger',2}

在终端中,程序会在运行一段时间后自动终止。

如何让这段代码更节省内存?

3 个答案:

答案 0 :(得分:0)

您可以将大型数据框拆分为较小的数据框,例如,此方法可以在您可以决定块大小的位置执行此操作:

def splitDataFrameIntoSmaller(df, chunkSize = 10000): 
    listOfDf = list()
    numberChunks = len(df) // chunkSize + 1
    for i in range(numberChunks):
        listOfDf.append(df[i*chunkSize:(i+1)*chunkSize])
    return listOfDf

有块后,可以分别在每个块上应用replace_str函数。

答案 1 :(得分:0)

整个replace_str函数(其名称实在不太好)可以替换为:

import pandas as pd

def replace_str(col):
    return {integer: value_in_df
            for integer, value_in_df in enumerate(df[col].unique(), 1)}

df = pd.DataFrame({'a': ['cat', 'dog']})

print(replace_str('a'))
#  {1: 'cat', 2: 'dog'}

答案 2 :(得分:0)

看起来您想要对所有非数字列进行分类(分解):

In [15]: df
Out[15]:
   ID    A      B
0  11  cat   lion
1  12  dog  tiger
2  13  cat  tiger

In [16]: for col in not_num_cols:
    ...:     df[col] = pd.factorize(df[col])[0]
    ...:

In [17]: df
Out[17]:
   ID  A  B
0  11  0  0
1  12  1  1
2  13  0  1