python pandas中的内存问题

时间:2015-04-30 05:28:25

标签: python pandas

我对熊猫很新。我将csv中的数据作为read_csv加载到数据帧中。 我的CSV文件是328KB,包含535行和7列,其中7列1列是JSON,其中包含近25-30个键。

我的逻辑是循环json列并找到百分位数值。但是当我运行这个python程序时,我的系统完全被绞死了。

    for rowcount in df.index:       
        jdata = json.loads(df[col_nam].ix[rowcount])        
        for rowindex in df.index:                       
            if (rowcount != rowindex):
                json_data = json.loads(df[col_nam].ix[rowindex])                
                for i in range(len(jdata.keys())):
                    count = 1
                    done = True                             
                    for j in range(len(json_data.keys())):
                        if(jdata.keys()[i] == json_data.keys()[j]):
                            if done:
                                count  = 0
                            done = False                    
                            if(json_data.values()[j] < jdata.values()[i]):                          
                                count = count + 1
                                break
                    result_data.append(pd.Series([str(jdata.keys()[i]),count,len(df.index),rowcount,df['D_code'].ix[rowcount],df['t_code'].ix[rowcount]],index = 

['key','lessthan_count','count','rowcount','D_code','t_code']))

修改后的代码:

for rowcount in df.index:       
    jdata = json.loads(df[col_nam].ix[rowcount])        
    for rowindex in df.index:                       
        if (rowcount != rowindex):
            json_data = json.loads(df[col_nam].ix[rowindex])                
            #for i in range(len(jdata.keys())):
             for key in jdata
                count = 1
                done = True                             
                #for j in range(len(json_data.keys())):
                 for key1 in json_data
                    #if(jdata.keys()[i] == json_data.keys()[j]):
                     if(key == key1)
                        if done:
                            count  = 0
                        done = False                    
                        if(json_data[key1] < jdata.key]):                           
                            count = count + 1
                            break
                result_data.append(pd.Series([str(key),count,len(df.index),rowcount,df['D_code'].ix[rowcount],df['t_code'].ix[rowcount]],index = ['key','lessthan_count','count','rowcount','D_code','t_code']))

当我使用ubuntu时,我使用top来查找记忆用法。它需要大约%MEM作为72.8,但它的变化。

我怎样才能克服这个问题。我正在使用5GB RAM系统。请分享您的想法。

编辑:

这是一个json专栏。这不是固定的,它会有所不同(长度)。

{"IND_EC_10_A":1.41,"IND_EC_10_C":3.09,"IND_EC_10_D":3.66,"IND_EC_10_F":1.08,"IND_EC_10_G":1.21,"IND_EC_10_H":2.01,"IND_EC_10_I":1.26,"IND_EC_10_J":2.17,"IND_EC_10_K":1.63,"IND_EC_10_L":12.47,"IND_EC_10_M":3.42,"IND_EC_10_N":1.70,"IND_EC_10_O":1.35}

编辑:

我没有循环使用JSON,而是尝试将键和值分隔为列,然后我可以找到百分位数值。我按照这个链接Pandas expand json field across records但它不适合我。

def json_to_series(text):
    keys, values = zip(*[item for dct in json.loads(text) for item in dct])
    return pd.Series(values, index=keys) 
result = df["json col name"].apply(json_to_series)

我收到错误为ValueError: need more than 1 value to unpack ..

0 个答案:

没有答案