首页 > 解决方案 > 从包含 json-strings 的列到 DataFrame

问题描述

我有一个数据框,其中有一列data如下

data
----
'{"user":"[1,2]", "name":"[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(columns=["user","name"]) #init
for val in data:
    df_end = pd.concat(pd.read_json(val)) #concat it

但这显然不能很好地扩展。

有没有更好的方法来完成它?

标签: jsonpandas

解决方案


您有两个比当前选项更好的选项:

(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))

推荐阅读