我有一个非常大的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)
您可以使用解析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)
| 归档时间: |
|
| 查看次数: |
980 次 |
| 最近记录: |