【问题标题】:Pandas- Concatenating two columns of string listsPandas-连接两列字符串列表
【发布时间】:2020-05-26 08:23:22
【问题描述】:

我有一个来自数据库的.. 有趣的数据框。数据框有两列,它们是字符串列表。我需要连接这两个列表中的值,以创建一个新的列表列。例如:

data = [ 
    {'id': 1, 'l1': ['Luke', 'Han'], 'l2': ['Skywalker', 'Solo']}, 
    {'id': 2, 'l1': ['Darth', 'Kylo'], 'l2': ['Vader', 'Ren']},
    {'id': 3, 'l1': [], 'l2': []}
]                                                                                                                                                                
df = pd.DataFrame(data)   

注意第三行没有值。您还可以假设l1l2 的长度相同。 我需要连接 l1 和 l2 中的值(之间有空格),例如:

result = [
    {'id': 1, 'name': ['Luke Skywalker', 'Han Solo']},
    {'id': 2, 'name': ['Darth Vader', 'Kylo Ren']},
    {'id': 3, 'name': []}
]
result_df = pd.DataFrame(result)

【问题讨论】:

  • name列的元素会一直是两个字符串的列表还是空列表?
  • No.. 元素可以是任意长度的列表(尽管l1l2 保证长度相同)

标签: python string pandas list concat


【解决方案1】:

这应该可以让您到达您想要的位置:假设您只有两列(如果您有更多列,只需添加其中之一 ' '+df.iloc[j,3 &or 4 &or...][i])

Voila =[]
for j in range(len(df)):
    Voila.append([df.iloc[j,1][i]+ ' '+df.iloc[j,2][i] for i in range(len(df. 
                                                                loc[j,'l1']))])
df['Voila'] = Voila

【讨论】:

    【解决方案2】:

    您使用dict comprehension' '.joinzip 组合来迭代您的数据集,例如:

    import pandas as pd
    
    
    data = [ 
        {'id': 1, 'l1': ['Luke', 'Han'], 'l2': ['Skywalker', 'Solo']}, 
        {'id': 2, 'l1': ['Darth', 'Kylo'], 'l2': ['Vader', 'Ren']},
        {'id': 3, 'l1': [], 'l2': []}
    ]                                                                                                                                                                
    df = pd.DataFrame(data) 
    
    result = [
        {
            'id': row['id'], 
            'name': [' '.join(l1_l2) for l1_l2 in zip(row['l1'], row['l2'])]
        } for row in data
    ]
    
    print(pd.DataFrame(result))
    >>>
       id                        name
    0   1  [Luke Skywalker, Han Solo]
    1   2     [Darth Vader, Kylo Ren]
    2   3                          []
    

    【讨论】:

      猜你喜欢
      • 2018-11-14
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      • 2018-05-15
      • 2017-04-24
      • 1970-01-01
      相关资源
      最近更新 更多