转换 - df["列"].apply() - 字段是dict转成多列
数据
import numpy as np
import pandas as pd
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是列名
df_new = pd.concat([df, df['dict字段列名'].apply(pd.Series)], axis=1).drop('dict字段列名', axis=1)
df_new = pd.concat([df, df['B'].apply(pd.Series)], axis=1).drop('B', axis=1)
# 如果B是字符串,要map(eval)转换
df_new = pd.concat([df, df['dict字段列名'].map(eval).apply(pd.Series)], axis=1).drop('dict字段列名', axis=1)
df_new = pd.concat([df, df['B'].map(eval).apply(pd.Series)], axis=1).drop('B', axis=1)
分段解释
df_1 = df["B"].apply(pd.Series)
df_1 = df["B"].map(eval).apply(pd.Series) # 如果B是字符串,要map(eval)转换
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 |
data = df_new.drop('dict字段列名', axis=1) # 后面可能还要drop
data = df_new.drop('B', axis=1)
|
A |
a |
b |
0 |
one |
1 |
2 |
1 |
two |
3 |
4 |
