首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫特色栏到多栏

熊猫特色栏到多栏
EN

Stack Overflow用户
提问于 2022-09-23 16:23:06
回答 1查看 48关注 0票数 0

我有一个CSV文件,其中有9列,最后一列是一系列特性的列,如下所示:

代码语言:javascript
复制
  First Name  Last Name                         Email Grad Date                Major List  Appointments Count  Advising Time  Labels Count                                   Labels Name List
0     Adrien      Yanez           ayaneza@twitter.com       NaN  Psychology: Neuroscience                  12            325            18  acad_stat=gr, class_code=sr, sess=fa, re_id=11...
1    Aindrea     Braams             abraams3v@nps.gov       NaN  Psychology: Neuroscience                   4            120            17  cx_id=600852, re_id=1114446, primary_departmen...
2      Alida  Swinburne  aswinburne52@cyberchimps.com  5/1/2022                Psychology                   1             30            14  re_id=1124407, primary_department=psychology, ...

Labels Name List是目标列,目标是创建新列,每个列在列表中有一个标记或特性的名称,该值是列表中标签名后面的'=‘符号后面的值,如果没有'=’符号,则值为1。

例如,如果第1行的标记列表是:

adv1=syed ahmad, cx_id=616758, re_id=1112539, slate_id=, class_session=spring, class_yr=2018, advd=joseph atkins, adv2=, not labeled seniors 2022

输出将如下所示:

代码语言:javascript
复制
         adv1   cx_id    re_id  slate_id class_session  class_yr           advd  adv2  not labeled seniors 2022
0  syed admad  616758  1112539         1        spring      2018  joseph atkins     1                         1

那我怎么才能在熊猫身上做到这一点呢?

注意:当然,所有行的总列数都是固定的,这意味着如果一个行没有标签名,它将在此标记列中取0或0的值。

EN

回答 1

Stack Overflow用户

发布于 2022-09-23 17:08:42

您可以创建一个函数,该函数将接收一个labels_name_list,然后将其拆分为,,然后由=来获取键值对,并将它们作为dict返回。类似于:

代码语言:javascript
复制
def fun(label_names_list):
    key_val_strings = label_names_list.split(',')
    key_val = map(lambda z: (z[0], z[1]), [x.split('=') for x in key_val_strings])
    return dict(key_val)

然后,您需要在labels_name_list列上应用它。这将创建一个新的dataframe:

代码语言:javascript
复制
new_df = df[1].apply(lambda s: pd.Series(fun(s)))

例如

代码语言:javascript
复制
a = [['A', 'Z=cat,b=a1, c=a2'], ['B', 'Z=dog,c=b1,  d=b2']]
new_df = df[1].apply(lambda s: pd.Series(fun(s)))

new_df:

代码语言:javascript
复制
    Z    b   c    c   d
0   cat a1  a2  NaN NaN
1   dog NaN NaN b1  b2

这不是一个完整的解决方案,例如,它没有删除空白,因此这里有两个列"c“和”c“,因为spacec之前使用了

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73830567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档