如何在列表中基于键字典创建新列



我有一个具有字典列表的数据帧(长度不等),我想创建一个基于键字典和字典值作为列值的新列

标准0[{'资历级别':'入门级别'},{'雇员级别'…1[{"工作类型":"全职"}]2[{'资历级别':'Associate'}, {'Employmen…3[{"工作类型":"兼职"}]4[{"资历级别":"Mid-Senior水平"},{他们…

... ...2768[{'资历级别':'入门级别'},{'雇员级别'…2769[{'资历级别':'入门级别'},{'雇员级别'…2770[{"资历级别":"入门级别"},{"雇员级别"…2771[{'年资级别':'中高级'},{'中高级'…2772[{"资历级别":"入门级别"},{"雇员级别">

我想创建这样的新列

我有这样一个函数:

import pandas as pd 
def reformat_json_column(dataframe: pd.DataFrame, column_name: str) -> pd.DataFrame:
"""
Split a list of JSON data with one line per element of the JSON
Each key of the JSON data is then used to construct a column and store the
related data
"""
data = dataframe.explode(column_name).reset_index(drop=True)
data = pd.concat(
[
data.drop(column_name, axis=1),
pd.json_normalize(data[column_name]),  # type: ignore
],
axis=1,
)
return data

下面是一个工作示例:

test_df = pd.DataFrame(
{
"a": [1, 2, 3],
"b": [
[{"c": 4, "d": 5}],
[{"c": 6, "d": 7}],
[{"c": 8, "d": 9}, {"c": 10, "d": 11}],
],
}
)
assert_df = pd.DataFrame(
{"a": [1, 2, 3, 3], "c": [4, 6, 8, 10], "d": [5, 7, 9, 11]}
)
pd.testing.assert_frame_equal(reformat_json_column(test_df, "b"), assert_df)

相关内容

  • 没有找到相关文章