从包含json字符串的列到数据帧
我有一个带有列从包含json字符串的列到数据帧,json,pandas,Json,Pandas,我有一个带有列data的数据框,如下所示 数据 ---- “{”用户“:[1,2]”,“名称“:[John,Doe]”” “{”user:“[3,4]”,“name:“[Foo,Bar]”” “{”user:“[1,3]”,“name:“[Baz,Bol]”” 我想要一个像这样的数据帧 user | name ------+----- 1 | John 2 | Doe 3 | Foo 4 | Bar 1 | Baz 3 | Bol 我可以在每
data
的数据框,如下所示
数据
----
“{”用户“:[1,2]”,“名称“:[John,Doe]””
“{”user:“[3,4]”,“name:“[Foo,Bar]””
“{”user:“[1,3]”,“name:“[Baz,Bol]””
我想要一个像这样的数据帧
user | name
------+-----
1 | John
2 | Doe
3 | Foo
4 | Bar
1 | Baz
3 | Bol
我可以在每一行上调用read_json
,并将其附加到前面的read_json
调用中,例如
df_end=pd.DataFrame(列=[“用户”,“名称])#init
对于数据中的val:
df_end=pd.concat(pd.read_json(val))#concat it
但这显然不能很好地扩展
有更好的方法来完成吗?您有两个比当前选项更好的选项: (1) 创建一个数据帧列表,并在末尾连接它们,而不是在每次迭代后连接 (2) 将列转换为dict列表,然后展平序列并转换为数据帧
# option 1
df_end = pd.concat([pd.read_json(val) for val in data])
# option 2
# this gives you a nested list
# itertools.chain.from_iterable will effectively flatten it
import itertools
data = [json.loads(val) for val in data]
df_end = pd.DataFrame(itertools.chain.from_iterable(data))
您可以尝试通过
defaultdict
创建列表字典:
from collections import defaultdict
d = defaultdict(list)
for x in df['data']:
for k, v in json.loads(x).items():
d[k].extend(v.strip('[]').split(','))
df = pd.DataFrame(d)
print (df)
user name
0 1 John
1 2 Doe
2 3 Foo
3 4 Bar
4 1 Baz
5 3 Bol
我尝试了您的解决方案,得到了
ValueError:预期对象或值
-是否可以在dict
中发布数据,例如前3个值?