从 pandas DataFrame 中的列中提取 JSON 数据

Posted

技术标签:

【中文标题】从 pandas DataFrame 中的列中提取 JSON 数据【英文标题】:Extracting JSON data from column in pandas DataFrame 【发布时间】:2019-02-03 11:49:47 【问题描述】:

如果我们有一个带有 Car_Info 列的 pandas 数据框 df1。

我们如何将以下字符串中的信息提取到新列中?即使用正则表达式与 pd.read_json()?

请注意“car_id”和“wheel_id”的格式与“price”和“count_results”的格式略有不同。

Car_Info

'"car_id":"100","wheel_id":"80-ABC-999","price":14,"count_results":1051'
'"car_id":"200","wheel_id":"90-XY-6134","price":245,"count_results":37'
'"car_id":"300","wheel_id":"100-QRST-83751","price":729,"count_results":203'

更具体地说,我们如何操作 Car_Info 列以将以下四列添加到 pandas 数据框 df1?

car_id
        100 
        200
        300

wheel_id
        80-ABC-999
        90-XY-6134
        100-QRST-83751

price
        14
        245
        729


count_results
        1051
        37
        203

【问题讨论】:

您的输入是 JSON。请标记 [json]。将 JSON 读入 pandas 有很多重复。 如何将 JSON 列转换为字典并提取 car_id、wheel_id、price 和 count_results 的结果? 我看到你在 2 小时后将其交叉发布为 https://***.com/questions/52066019/using-regex-to-extract-information-from-a-pandas-dataframe-column,这是不受欢迎的。此外,您没有将其表述为“使用正则表达式将 JSON 解析为熊猫”。 【参考方案1】:

这是JSON,pandas可以直接导入JSON:

import pandas as pd
df = pd.read_json('"car_id":"100","wheel_id":"80-ABC-999","price":14,"count_results":1051', lines=True)

   car_id  count_results  price    wheel_id
0     100           1051     14  80-ABC-999

【讨论】:

你会如何使用正则表达式回答这个问题? @user9723782:不要。不要重写库。不要重新发明***,即使您可以复制投入 pandas 的数万工时。我看到你把它交叉发布为https://***.com/questions/52066019/using-regex-to-extract-information-from-a-pandas-dataframe-column,这在 SO 上是不受欢迎的。此外,您没有将其表述为“使用正则表达式将 JSON 解析为熊猫”。【参考方案2】:

下面我创建了一个代码来创建一个新的数据框来解决您的问题。此数据框可以合并回您的原始数据框。

df = pd.DataFrame()
for row in range(len(df1['car'])):
     df = df.append(pd.DataFrame([ast.literal_eval(df1['car_info'][row])]))

可以从ast导入函数literal_eval,将列中的字符串作为字典处理。

【讨论】:

你会如何使用正则表达式回答这个问题?

以上是关于从 pandas DataFrame 中的列中提取 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Python Pandas Dataframe 中的 STRING 列中提取嵌套字典?

从pandas DataFrame中另一列中的位置给定的字符串列中提取字符[重复]

如何从python中的pandas数据框中的列中提取关键字(字符串)

pandas DataFrame 列中的布尔运算

从 csv 中提取列中的数据,保存为字典(Python、Pandas)

如何从包含文本的熊猫数据框中的列中提取年份(或日期时间)