pandas将dataframe列中的list转换为多列

admin 2023年12月27日16:13:10评论29 views字数 1848阅读6分9秒阅读模式

pandas将dataframe列中的list转换为多列

在应用机器学习的过程中,很大一部分工作都是在做数据的处理,一个非常常见的场景就是将一个list序列的特征数据拆成多个单独的特征数据。

比如数据集如下所示:

1
2
3
4
5
data = [['John', '25', 'Male',[99,100,98]],
['Emily', '22', 'Female',[97,99,98]],
['Michael', '30', 'Male',[97,99,100]]]
df_data= pd.DataFrame(data,columns=['Name', 'Age', 'Gender','Score'])
df_data

pandas将dataframe列中的list转换为多列很多场景是需要将类似于Score的list序列特征,拆成多个特征值如这里的语、数、外的分数。

下面通过几个实例来将dataframe列中的list序列转换为多列。

1、一维序列拆成多列

可以通过在列上应用Series来进行拆分。

1
2
df_score=df_data['Score'].apply(pd.Series).rename(columns={0:'English',1:'Math',2:'Chinese'})
df_score

pandas将dataframe列中的list转换为多列

可以看到将Score的数组,拆分成了English、Math、Chinese三个特征字段了

1
2
df_data=df_data.join(df_score)
df_data

pandas将dataframe列中的list转换为多列

2、二维序列拆成多列

用同样的思路也可以将二维序列的特征列拆成多列
如特征列是二维序列,序列里还有多个序列

1
2
3
4
5
data = [['John', '25', 'Male',[[99,100,98],[89,70]]],
['Emily', '22', 'Female',[[97,99,98],[99,96]]],
['Michael', '30', 'Male',[[97,99,100],[87,99]]]]
df_data= pd.DataFrame(data,columns=['Name', 'Age', 'Gender','Score'])
df_data

pandas将dataframe列中的list转换为多列

1
2
3
4
5
6
df_score=df_data['Score'].apply(pd.Series)
df_score_1=df_score[0].apply(pd.Series).rename(columns={0:'English',1:'Math',2:'Chinese'})
df_score_2=df_score[1].apply(pd.Series).rename(columns={0:'Biology',1:'Geography'})
df_score=df_score_1.join(df_score_2)
df_data=df_data.join(df_score_1).join(df_score_2)
df_data

pandas将dataframe列中的list转换为多列

另外一种情况就是序列里面只有一个序列的二维序列,数据如下所示:


1
2
3
4
5
data = [['John', '25', 'Male',[[99,100,98,89,70]]],
['Emily', '22', 'Female',[[97,99,98,99,96]]],
['Michael', '30', 'Male',[[97,99,100,87,99]]]]
df_data= pd.DataFrame(data,columns=['Name', 'Age', 'Gender','Score'])
df_data


pandas将dataframe列中的list转换为多列

这样也可以通过多次应用Series来进行拆分,也可以先explode()再应用Series来进行拆分。

1
2
df_score=df_data['Score'].apply(pd.Series)[0].apply(pd.Series).rename(columns={0:'English',1:'Math',2:'Chinese',3:'Biology',4:'Geography'})
df_score

pandas将dataframe列中的list转换为多列

1
2
df_score=df_data['Score'].explode().apply(pd.Series).rename(columns={0:'English',1:'Math',2:'Chinese',3:'Biology',4:'Geography'})
df_score


pandas将dataframe列中的list转换为多列

两者效果是一样的。


博客地址:http://xiejava.ishareread.com/

“fullbug”微信公众号


关注:微信公众号,一起学习成长!



原文始发于微信公众号(fullbug):pandas将dataframe列中的list转换为多列

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月27日16:13:10
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   pandas将dataframe列中的list转换为多列https://cn-sec.com/archives/2339453.html

发表评论

匿名网友 填写信息