首页 > 解决方案 > 如何将一个包含 JSON 值的 CSV 列转换为 4 个不同的列?

问题描述

我有一个名为 Parsing.csv 的 CSV,其内容显示如下

userid            data_to_parse
54f3ad9a29ada   "value":"N;U;A7;W"}]
54f69f2de6aec   "value":"N;U;I6;W"}]
54f650f004474   "value":"Y;U;A7;W"}]
54f52e8872227   "value":"N;U;I1;W"}]
54f64d3075b72   "value":"Y;U;A7;W"}]
54f69dc01793f   "value":"N;U;A1;W"}]
54f5d26833ce6   "value":"N;U;A1;W"}]
54f52b1a7e647   "value":"N;U;A4;W"}]
54f4ae7da8d01   "value":"N;U;A1;W"}]
54f6290ca187d   "value":"N;U;U;W"}]

我已经阅读了这个数据框

Parsing = pd.read_csv("data/Parsing.csv") 

现在我想将值(存储在“data_to_parse”列中)解析为四个单独的列。

例如,第一个条目的四个附加列的值将是“N”、“you”、“A7”和“W”。这些数据基本上来自 JSON blob。我怎样才能实现它?

试过了,但它给了我一个错误,说它不能在 pandas 属性错误中识别 JSON

 v=pd.io.json.json_normalize
(Parsing.data_to_parse.apply(pd.json.loads).tolist())

预期输出:具有不同列的数据框中的第一个条目将如下 -

userid        | value1| value2| value3| value4
54f3ad9a29ada | N     |  U    |    A7 | W

标签: pythonpandasdataframe

解决方案


IIUC,一种方法是使它们成为正确的json并使用pandas.Series.str.split

s = ("{" + df["data_to_parse"].str.strip("]")).apply(pd.io.json.loads)
df2 = s.str["value"].str.split(";", expand=True)
new_df = pd.concat([df, df2.add_prefix("value")], axis=1)
print(new_df)

输出:

          userid         data_to_parse value0 value1 value2 value3
0  54f3ad9a29ada  "value":"N;U;A7;W"}]      N      U     A7      W
1  54f69f2de6aec  "value":"N;U;I6;W"}]      N      U     I6      W
2  54f650f004474  "value":"Y;U;A7;W"}]      Y      U     A7      W
3  54f52e8872227  "value":"N;U;I1;W"}]      N      U     I1      W
4  54f64d3075b72  "value":"Y;U;A7;W"}]      Y      U     A7      W
5  54f69dc01793f  "value":"N;U;A1;W"}]      N      U     A1      W
6  54f5d26833ce6  "value":"N;U;A1;W"}]      N      U     A1      W
7  54f52b1a7e647  "value":"N;U;A4;W"}]      N      U     A4      W
8  54f4ae7da8d01  "value":"N;U;A1;W"}]      N      U     A1      W
9  54f6290ca187d   "value":"N;U;U;W"}]      N      U      U      W

推荐阅读