我对熊猫很新。我将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
..