如何更改特定列以从单元素列表中删除列表

2024-10-03 23:28:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含5列的熊猫数据框:

    ID             Title         Sponsor name       Date       Comparator 

0   [NT0235]     [bla bla bla]  [sponsor name1]  2021-08-13    [comparator1]
1   [NT0236]     [bla bla bla]  [sponsor name2]  2021-08-12    [comparator2]
2   [NT0237]     [bla bla bla]  [sponsor name3]  2021-08-11    [comparator3]
3   [NT0238]     [bla bla bla]  [sponsor name4]  2021-08-10    [comparator4]
4   [NT0239]     [bla bla bla]  [sponsor name5]  2021-08-09    [comparator5]

我需要从列中删除列表:ID、Title、赞助商名称和Comparator,因为它们都是单元素列表(如果不是,可以使用空格作为分隔符连接元素)。 我该怎么做?谢谢

这是df:

import pandas as pd
    
data = {'ID': [['NT0235'],['NT0236'],['NT0237'],['NT0238'],['NT0239']],'Title': [['bla bla bla'] , ['bla bla bla'] , ['bla bla bla'], ['bla bla bla'] , ['bla bla bla']] , 'Sponsor name': [['sponsor name1'], ['sponsor name2'], ['sponsor name3'], ['sponsor name4'], ['sponsor name5']], 'Date': ['2021-08-13','2021-08-12','2021-08-11','2021-08-10','2021-08-09'], 'Comparator': [['comparator1'], ['comparator2'], ['comparator3'], ['comparator4'], ['comparator5']]
}
    
df = pd.DataFrame(data)

我需要的是这个df:

    ID             Title         Sponsor name       Date       Comparator 

0   NT0235     bla bla bla     sponsor name1     2021-08-13    comparator1
1   NT0236     bla bla bla     sponsor name2     2021-08-12    comparator2
2   NT0237     bla bla bla     sponsor name3     2021-08-11    comparator3
3   NT0238     bla bla bla     sponsor name4     2021-08-10    comparator4
4   NT0239     bla bla bla     sponsor name5     2021-08-09    comparator5

Tags: nameiddatetitleblaname1comparatorname2
3条回答

使用:

df[['ID', 'Title', 'Sponsor name', 'Comparator']] = df[['ID', 'Title', 'Sponsor name', 'Comparator']].apply(lambda x: x.explode())

输出:

       ID        Title   Sponsor name        Date   Comparator
0  NT0235  bla bla bla  sponsor name1  2021-08-13  comparator1
1  NT0236  bla bla bla  sponsor name2  2021-08-12  comparator2
2  NT0237  bla bla bla  sponsor name3  2021-08-11  comparator3
3  NT0238  bla bla bla  sponsor name4  2021-08-10  comparator4
4  NT0239  bla bla bla  sponsor name5  2021-08-09  comparator5

如果有list个值(以及其中的字符串),则可以通过空格连接值-它适用于一个元素,也适用于多个元素列表:

df = df.applymap(lambda x: ' '.join(x) if isinstance(x, list) else x)

如果可能,请输入一些数值:

df = df.applymap(lambda x: ' '.join(map(str, x)) if isinstance(x, list) else x)

对于这种简单的情况,您可以使用^{}对每列应用^{},如下所示:

df = df.apply(pd.Series.explode)

结果:

print(df)


       ID        Title   Sponsor name        date   comparator
0  NT0235  bla bla bla  sponsor name1  2021-08-13  comparator1
1  NT0236  bla bla bla  sponsor name2  2021-08-12  comparator2
2  NT0237  bla bla bla  sponsor name3  2021-08-11  comparator3
3  NT0238  bla bla bla  sponsor name4  2021-08-10  comparator4
4  NT0239  bla bla bla  sponsor name5  2021-08-09  comparator5

如果只想应用于选定列,可以使用:

df[['ID', 'Title', 'Sponsor name', 'Comparator']] = df[['ID', 'Title', 'Sponsor name', 'Comparator']].apply(pd.Series.explode)

相关问题 更多 >