• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

  • 共95篇

    python3.X - 数据分析 - Pandas

关闭

返回栏目

关闭

返回python3.X - 数据分析 - Pandas栏目

30 - 转换 - df["列"].apply() - 字段是dict转成多列

作者:

贺及楼

成为作者

更新日期:2024-10-18 14:31:23

字段是dict转成多列

数据

  1. import numpy as np
  2. import pandas as pd
  3. df = pd.DataFrame(data=[{"A":"one", "B":'{"a":1,"b":2}'}, {"A":"two", "B":'{"a":3,"b":4}'}])
A B
0 one {"a":3,"b":4}
1 two {"a":3,"b":4}

方法

转成多列
字典的key是列名

  1. df_new = pd.concat([df, df['dict字段列名'].apply(pd.Series)], axis=1).drop('dict字段列名', axis=1)
  2. df_new = pd.concat([df, df['B'].apply(pd.Series)], axis=1).drop('B', axis=1)
  3. # 如果B是字符串,要map(eval)转换
  4. df_new = pd.concat([df, df['dict字段列名'].map(eval).apply(pd.Series)], axis=1).drop('dict字段列名', axis=1)
  5. df_new = pd.concat([df, df['B'].map(eval).apply(pd.Series)], axis=1).drop('B', axis=1)

分段解释

  1. df_1 = df["B"].apply(pd.Series)
  2. df_1 = df["B"].map(eval).apply(pd.Series) # 如果B是字符串,要map(eval)转换
a b
0 1 2
1 3 4
  1. df_new = pd.concat([df,df_1], axis=1)
A B a b
0 one {"a":1,"b":2} 1 2
1 two {"a":3,"b":4} 3 4
  1. data = df_new.drop('dict字段列名', axis=1) # 后面可能还要drop
  2. data = df_new.drop('B', axis=1)
A a b
0 one 1 2
1 two 3 4

字段是dict转成多列