替换为多个未在 pandas 中更新的条件

Posted

技术标签:

【中文标题】替换为多个未在 pandas 中更新的条件【英文标题】:replace with multiple conditions not updating in pandas 【发布时间】:2022-01-23 21:50:06 【问题描述】:

我正在尝试根据行索引替换一个值,并且只替换数据框中的某些列。

对于 b 和 c 列,我想将值 1 替换为 np.nan,用于第 1、2 和 3 行

df = pd.DataFrame(data='a': ['"dog", "cat"', '"dog"', '"mouse"', '"mouse", "cat", "bird"', '"circle", "square"', '"circle"', '"triangle", "square"', '"circle"'],
                        'b': [1,1,3,4,5,1,2,3],
                        'c': [3,4,1,3,2,1,0,0],
                        'd': ['a','a','b','c','b','c','d','e'],
                        'id': ['group1','group1','group1','group1', 'group2','group2','group2','group2'])

我正在使用以下行,但它没有更新到位,如果我尝试分配它,则只返回修改行的子集,而不是原始数据帧的更新版本。

df[df.index.isin([1,2,3])][['b','c']].replace(1, np.nan, inplace=True)

【问题讨论】:

【参考方案1】:

你可以这样做:

df.loc[1:3, ['b', 'c']] = df.loc[1:3, ['b', 'c']].replace(1, np.nan)

输出:

>>> df
                        a    b    c  d      id
0            "dog", "cat"  1.0  3.0  a  group1
1                   "dog"  NaN  4.0  a  group1
2                 "mouse"  3.0  NaN  b  group1
3  "mouse", "cat", "bird"  4.0  3.0  c  group1
4      "circle", "square"  5.0  2.0  b  group2
5                "circle"  1.0  1.0  c  group2
6    "triangle", "square"  2.0  0.0  d  group2
7                "circle"  3.0  0.0  e  group2

更动态的版本:

cols = ['b', 'c']
rows = slice(1, 3)  # or [1, 2, 3] if you want
df.loc[rows, cols] = df.loc[rows, cols].replace(1, np.nan)

【讨论】:

以上是关于替换为多个未在 pandas 中更新的条件的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas根据多个其他列中的条件替换一列中的值[重复]

Pandas DataFrame:根据条件替换列中的所有值

仅在特定条件下将 NaN 替换为“-”符号,Python-Pandas

反应:条件类名称未在 DOM 中更新

14.pandas里面按条件筛选

Pandas Dataframe - 根据正则表达式条件替换所有单元格值