从包含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个值?