【发布时间】: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]