You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何替换Pandas DataFrame列表列中的指定元素?

问题:替换DataFrame列表列中的指定元素

现有如下Pandas DataFrame:

import numpy as np
import pandas as pd 

df = pd.DataFrame({'store':range(1,4),
                   'food':[['fish', 'apple'],
                           ['orange', 'water'],
                           ['egg', 'fish']]})  

输出结构:

store           food
0      1  [fish, apple]
1      2  [orange, water]
2      3    [egg, fish]

希望将其中所有的fish替换为milk,得到目标DataFrame:

store           food
0      1  [milk, apple]
1      2  [orange, water]
2      3    [egg, milk]

尝试使用for循环实现,但结果得到扁平列表,不符合预期:

food1 = []
for i in range(df.shape[0]):
    for j in range(len(df['food'][0])):
        if df['food'][i][j] == 'fish':
            food1.append('milk')
        else:
            food1.append(df['food'][i][j])
food1
# 输出:['milk', 'apple', 'orange', 'water', 'egg', 'milk']

正确实现方法

方法1:调整循环逻辑,保留子列表结构

原循环的问题是直接把所有元素追加到同一个大列表,没有为每一行创建独立的子列表。修改后:

food1 = []
for lst in df['food']:
    new_lst = []
    for item in lst:
        new_lst.append('milk' if item == 'fish' else item)
    food1.append(new_lst)

# 更新DataFrame
df['food'] = food1
print(df)

输出:

store           food
0      1  [milk, apple]
1      2  [orange, water]
2      3    [egg, milk]

方法2:使用apply结合列表推导式(更简洁)

利用Pandas的apply方法对每一行的列表批量处理:

df['food'] = df['food'].apply(lambda lst: ['milk' if x == 'fish' else x for x in lst])
print(df)

输出结果与目标一致。

方法3:直接用列表推导式生成新列

通过嵌套列表推导式直接生成替换后的列数据:

df['food'] = [['milk' if x == 'fish' else x for x in lst] for lst in df['food']]
print(df)

内容的提问来源于stack exchange,提问作者DaCard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 08:15:35