【问题标题】:Pandas column containing lists - iterate through each list problem包含列表的 Pandas 列 - 遍历每个列表问题
【发布时间】:2020-04-05 06:30:25
【问题描述】:

假设我有一个数据框,例如

df = pd.DataFrame({'a': [1,2,3], 'b': [['this', 'is', 'a', 'sentence'],['we', 'like', 'pizza'],['hello', 'world']]})

我想遍历 b 列中的列表并做一些事情,比如将每个字母大写。我可以做类似的事情

for row in df['b']:
    row = [i.upper() for i in row]
    print(row)
# ['THIS', 'IS', 'A', 'SENTENCE']
# ['WE', 'LIKE', 'PIZZA']
# ['HELLO', 'WORLD']

但它不会替换该列中的列表。我以为我正在重新分配 for 循环中的行值,但显然我不是在此之后打印数据帧时:

print(df)
#    a                        b
# 0  1  [this, is, a, sentence]
# 1  2        [we, like, pizza]
# 2  3           [hello, world]

这样做的正确方法是什么?谢谢!

【问题讨论】:

  • 通过分配回可迭代对象,您不会更新数据帧,请参阅here。做类似df['b'] = [[s.upper() for s in l] for l in df.b]

标签: python pandas dataframe


【解决方案1】:

你可以使用pandas.DataFrame.apply:

 df['b'] =  df['b'].apply(lambda x: list(map(str.upper, x)))
 df

输出:

【讨论】:

  • 我在找申请!谢谢!我知道我错过了什么。
【解决方案2】:

我不知道这样做是否正确,但df.b = df.b.apply(lambda x: [i.upper() for i in x]) 应该可以。

【讨论】:

    猜你喜欢
    • 2013-07-26
    • 2018-06-11
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多