我有一堆带有大量数据的CSV。其中一列ExtraParams
包含一个JSON对象。我想使用特定的密钥提取值,但是需要花费很长时间才能通过CSV中的60.000个行。可以加速吗?
counter = 0 #just to see where I'm at
order_data['NewColumn'] = ''
for row in range(len(total_data)):
s = total_data['ExtraParams'][row]
try:
data = json.loads(s)
new_data = data['NewColumn']
counter += 1
print(counter)
order_data['NewColumn'][row] = new_data
except:
print('NewColumn not in row')
我使用了一个尝试 - 除了因为一些行具有我认为混乱的JSON,因为它们使用#34;期望的分隔符''""错误。
当我说"慢"我的意思是〜60分钟的约30分钟。
编辑:每个JSON包含大约35个键/值对可能没什么价值。
答案 0 :(得分:3)
您可以使用pandas
之类的内容并使用apply
方法。对于test.csv中的一些简单样本数据
Col1,Col2,ExtraParams
1,"a",{"dog":10}
2,"b",{"dog":5}
3,"c",{"dog":6}
您可以使用类似
的内容In [1]: import pandas as pd
In [2]: import json
In [3]: df = pd.read_csv("test.csv")
In [4]: df.ExtraParams.apply(json.loads)
Out[4]:
0 {'dog': 10}
1 {'dog': 5}
2 {'dog': 6}
Name: ExtraParams, dtype: object
如果需要从json中提取字段,假设每行中都有字段,则可以编写一个lambda函数,如
In [5]: df.ExtraParams.apply(lambda x: json.loads(x)['dog'])
Out[5]:
0 10
1 5
2 6
Name: ExtraParams, dtype: int64