我有一个CSV文件,其中有9列,最后一列是一系列特性的列,如下所示:
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
输出将如下所示:
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的值。
发布于 2022-09-23 17:08:42
您可以创建一个函数,该函数将接收一个labels_name_list,然后将其拆分为,,然后由=来获取键值对,并将它们作为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列上应用它。这将创建一个新的dataframe:
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之前使用了
https://stackoverflow.com/questions/73830567
复制相似问题