【问题标题】:Concatenate a column of lists within a dataframe [duplicate]连接数据框中的一列列表[重复]
【发布时间】:2020-05-29 11:40:42
【问题描述】:

我在 pandas 中有一个数据框,其中一个列是一组列表;但是,该列中的某些列表的元素比其他列表多:

df['Name'].head()

输出:

0 ['Andrew', '24']
1 ['James']
2 ['Billy', '19', 'M']
3 ['Grace', '42']
4 ['Amy']

我是否可以将每个列表中的每个元素连接在一起,同时仍然保持我的 df?

期望的输出:

0 'Andrew24'
1 'James'
2 'Billy19M'
3 'Grace42'
4 'Amy'

我尝试了很多不同的东西;我得到的最接近的是使用下面的片段,但这将每条记录中的所有列表连接在一起:

def concatenate_list_data(list):
    result= ''
    for element in list:
       result += str(element)
    return result
df['Name'] = concatenate_list_data(df['Name'])`

【问题讨论】:

标签: python pandas list dataframe


【解决方案1】:

Pandas 为此提供了一种方法,Series.str.join: df['Name'].str.join('')

【讨论】:

  • 我无法改变任何东西
  • @AndrewVitek 这真的很奇怪,你得到了什么输出?在将结果分配回 DataFrame 之前,您是否尝试过打印结果?
  • 您可能希望将该列重新定义为 df['Name'] = df['Name'].str.join('') 我不确定该函数是否将 inplace=True 作为默认行为
  • @CeliusStingher 哦,当然,我分享的并不会单独改变 DataFrame,它只是一个 Series 方法。
【解决方案2】:

试试这个:

df['Name'].apply(lambda x: ''.join(x)

输出:

0    Andrew24
1       James
2    Billy19M
3     Grace42
4         Amy
Name: Name, dtype: object

【讨论】:

  • 或者只是df['Name'].agg(''.join)
  • 这行得通。非常感谢!
  • 为什么要使用它而不是 Pandas 直接提供的功能...?
猜你喜欢
  • 1970-01-01
  • 2021-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-10
  • 1970-01-01
  • 2021-03-27
  • 1970-01-01
相关资源
最近更新 更多