用JSON列展平熊猫数据框

Mou*_*usa 2 python pandas

我有一个非常大的CSV格式数据集,其中一列是JSON字符串。我想将此信息读入一个扁平的 Pandas数据框中。如何有效地做到这一点?

输入CSV:

col1,col2,col3,col4
1,Programming,"{""col3_1"":null,""col3_2"":""Java""}",11
2,Sport,"{""col3_1"":null,""col3_2"":""Soccer""}",22
3,Food,"{""col3_1"":null,""col3_2"":""Pizza""}",33 
Run Code Online (Sandbox Code Playgroud)

预期的DataFrame:

+---------------------------------------------------------------+
|   col1    |    col2     |   col3_1    |   col3_2  |   col4    |
+---------------------------------------------------------------+
|    1      | Programming |    None     |    Java   |    11     |
|    2      |    Sport    |    None     |   Soccer  |    22     |
|    3      |    Food     |    None     |   Pizza   |    33     |
+---------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

我目前可以使用以下代码获得预期的输出。我只想知道是否有更有效的方法来实现相同的目标。

import json
import pandas
dataset = pandas.read_csv('/dataset.csv')
dataset['col3'] = dataset['col3'].apply(json.loads)
dataset['col3_1'] = dataset['col3'].apply(lambda row: row['col3_1'])
dataset['col3_2'] = dataset['col3'].apply(lambda row: row['col3_2'])
dataset = dataset.drop(columns=['col3'])
Run Code Online (Sandbox Code Playgroud)

Max*_*axU 5

您可以使用解析Pandas列中的JSON,然后使用json.loads()转换为Pandas列pd.Series()

In [85]: df.join(df.pop('col3').apply(lambda x: pd.Series(json.loads(x))))
Out[85]:
   col1         col2  col4 col3_1  col3_2
0     1  Programming    11   None    Java
1     2        Sport    22   None  Soccer
2     3         Food    33   None   Pizza
Run Code Online (Sandbox Code Playgroud)