提问人:Nader Shehata 提问时间:9/24/2022 最后编辑:RabinzelNader Shehata 更新时间:9/24/2022 访问量:129
Pandas 列的特征到多个列
Pandas column of features to multiple columns
问:
我有一个有 9 列的 CSV 文件,最后一个是功能列表的一列,如下所示:
First Name Last Name Email Grad Date Major List Appointments Count Advising Time Labels Count Labels Name List
0 Adrien Yanez [email protected] NaN Psychology: Neuroscience 12 325 18 acad_stat=gr, class_code=sr, sess=fa, re_id=11...
1 Aindrea Braams [email protected] NaN Psychology: Neuroscience 4 120 17 cx_id=600852, re_id=1114446, primary_departmen...
2 Alida Swinburne [email protected] 5/1/2022 Psychology 1 30 14 re_id=1124407, primary_department=psychology, ...
该列是目标列,目标是创建新列,每个列都有一个列表中的标签或要素的名称,值是列表中标签名称后面的“=”符号后面的值,如果没有“=”符号,则取值 1。Labels Name List
例如,如果第 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
输出将如下所示:
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
那么我该如何在熊猫身上做到这一点呢?
注意:对于所有行,总列数当然是固定的,这意味着如果一行没有标签名称,它将在此标签列中取值 none 或 0
答:
0赞
AndrzejO
9/24/2022
#1
您可以创建一个函数,该函数将接收一个labels_name_list,将其除以,然后按 by 进行拆分以获得键值对,并将它们作为 .像这样:,
=
dict
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列。这将创建一个新的数据帧:
new_df = df[1].apply(lambda s: pd.Series(fun(s)))
例如
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:
Z b c c d
0 cat a1 a2 NaN NaN
1 dog NaN NaN b1 b2
这不是一个完整的解决方案,例如它不会删除空格,所以你这里有两列“c”和“c”,因为之前space
c
评论
...
Labels List Name