json - 从包含 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
但这显然不能很好地扩展。
有没有更好的方法来完成它?
解决方案
您有两个比当前选项更好的选项:
(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))
推荐阅读
- c++ - 为用户定义的类正确调用复制构造函数/赋值运算符
- python - 从python包导入模块
- c++ - 操作系统是否可以将阻塞/屈服线程重用于不同的任务?
- javascript - 如何在没有 Html-Imports 的情况下打包或导入 Html-Templates
- arrays - 如何在 React 的数组 json 对象中保存多个类别复选框
- python - Tkinter 图像流
- c++ - 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- python - 'pandas' 没有属性 'read_csv'"
- php - 如何在php中将字符串转换为关联数组
- sql - 使用同一列中的日期添加列的 SQL Select 语句