python - 替换 Pandas 数据框中的列表元素

标签 python list pandas dataframe replace

df=pd.DataFrame({"a":[1,2,3,[4,5],["apple","pear"]]})
df.replace({[4,5]:4.5})
df.replace({["apple","pear"]:"apple"})

这里我遇到了 TypeError。我想替换具体的列表,要替换的列表和替换列表的对象之间没有任何规定。

最佳答案

不是一个微不足道的问题,因为 DataFrame 并非设计用于处理可变对象,如列表、集合或字典。

您可以确定匹配的索引并进行相应的替换。

m = [v == [4, 5] for v in df['a']] 
df.loc[m, 'a'] = 4.5

df
               a
0              1
1              2
2              3
3            4.5
4  [apple, pear]

['apple', 'pair'] 遵循类似的过程。如果您愿意,可以从中形成一个函数:

def replace(df, col, key, val):
    m = [v == key for v in df[col]]
    df.loc[m, col] = val

replace(df, 'a', [4, 5], 4.5)
replace(df, 'a', ['apple', 'pear'], 'apple')

df
       a
0      1
1      2
2      3
3    4.5
4  apple

注意:该函数就地工作。

关于python - 替换 Pandas 数据框中的列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50322875/

相关文章:

python - Pandas 中的条件虚拟变量

python - 不计算整个矩阵的 numpy 矩阵的对角线

python - scrapy,如何在 HTML 标签元素中分隔文本

python - 使用 python 删除列表中的重复条目

list - 嵌套数据结构中的过滤/模式匹配

python - 将无向 NetworkX 图转换为有向 NetworkX 图

python - 如何为 Python 3.2 设置 Komodo Edit

python - 如何根据 Pandas 列中最后一次出现的字符串提取数据框的子集?

python - 检查字典内字典内列表的值

python - 两个数据帧的索引和列的并集