import json
pd.concat([pd.DataFrame(json.loads(s), index=[ind]) for ind, s in series.str.replace('\'', '"').items()], sort=False)
length style width id mfg
1 27 mm Short 9 mm NaN NaN
2 51 mm Long 9 mm NaN NaN
5 29 mm Medium 9 mm 16684 NaN
6 29 mm Medium 7 mm NaN 45-163
8 33 mm Medium 8 mm NaN NaN
In [110]: %%timeit
...: my_out_df1 = pd.DataFrame(
...: my_json_series.apply(json.loads).to_list()
...: , index=my_json_series.index # optional if you want to keep the index
...: )
362 ms ± 5.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [111]: %%timeit
...: my_out_df_2 = pd.concat(
...: [pd.DataFrame(json.loads(s), index=[ind])
...: for ind, s in my_json_series.items()],
...: sort=False
...: )
14.9 s ± 310 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
2条答案
按热度按时间8ftvxx2r1#
我建议
1.将所有json转换为dict
1.将每个dict转换为DataFrame
本例中的数据为
series
。它还将'
替换为"
:k2arahey2#
假设你有有效的JSON(e。例如,双引号、有效语法等,请参见Viacheslav Zhukov's answer中的讨论),在您的系列中,您还可以使用
避免了for循环/列表解析,并且速度快了很多。
这些步骤相当
1.将每个JSON转换为dict
1.把所有的单词合并成一个列表
1.从列表中创建
DataFrame
此外,我没有得到一个正确的
MultiIndex
与建议的for循环。我必须补充的是,我测试了一个完全不同的系列,我的每个JSON中有4个元素,系列中有大约10,000个元素。