如何简单地将pandas内的JSON列分开:
pd.DataFrame({
'col1':[1,2],
'col2':["{'foo':1, 'bar':2, 'baz':{'foo':2, 'x':1}}",
"{'foo':3, 'bar':5, 'baz':{'foo':2, 'x':1}}"]})
col1 col2
0 1 {'foo':1, 'bar':2, 'baz':{'foo':2, 'x':1}}
1 2 {'foo':3, 'bar':5, 'baz':{'foo':2, 'x':1}}
以简单的python方式转换为实列吗?
所需的输出:
pd.DataFrame({'col1':[1,2], 'foo':[1,3], 'bar':[2,5],
'baz_foo':[2,2], 'baz_x':[1,1]})
col1 foo bar baz_foo baz_x
0 1 1 2 2 1
1 2 3 5 2 1
答案 0 :(得分:5)
l : loop # b = b
是处理嵌套JSON数据的正确方法。
json_normalize
请注意,您仍然必须先将JSON转换为字典。
如果要在“ col2”中处理NaN,请尝试在最后使用import ast
from pandas.io.json import json_normalize
v = json_normalize([ast.literal_eval(j) for j in df.pop('col2')], sep='_')
pd.concat([df, v], 1)
col1 bar baz_foo baz_x foo
0 1 2 2 1 1
1 2 5 2 1 3
:
join
df = pd.DataFrame({
'col1':[1,2,3],
'col2':["{'foo':1, 'bar':2, 'baz':{'foo':2, 'x':1}}",
"{'foo':3, 'bar':5, 'baz':{'foo':2, 'x':1}}",
np.nan]})
答案 1 :(得分:0)
json_normalize
将嵌套的类似json的字典更改为表。嵌套路径用于创建列名。
import pandas as pd
from pandas.io.json import json_normalize
data = {'col1':[1,2,3],
'col2':[{'foo': 1, 'bar': 2, 'baz': {'foo': 2, 'x': 1}},
{'foo': 3, 'bar': 5, 'baz': {'foo': None, 'x': 1}}]}
pd.DataFrame(data={"col1": data["col1"]})\
.join(json_normalize(data["col2"]))