python - 更改 Pandas DataFrame 中的特定值(其中有混合类型)

标签 python pandas dataframe

我有一个 Pandas 数据框,我想通过一些增量(例如 .001)来增加大于零的任何值,但仅在列的子集中。

df=pd.DataFrame({'a': ['abc', 'abc', 'abc', 'abc'], 'b': [2,np.nan, 0, 6], 'c': [1, 0, 2, 0]})

     a    b  c
0  abc  2.0  1
1  abc  NaN  0
2  abc  0.0  2
3  abc  6.0  0

所以我试过这个:
df[df.loc[:,['b', 'c']]>0]+=1

TypeError: Cannot do inplace boolean setting on mixed-types with a non np.nan value

但是,由于第一列具有对象 dtype,因此您可以从错误中看到,我无法执行此操作。所需的输出是:
     a    b      c
0  abc  2.001  1.001
1  abc  NaN    0
2  abc  0.0    2.001
3  abc  6.001  0

有没有办法在不分别显式循环每一列的情况下做这种事情?

我相信我只是缺少一个简单的方法,但似乎找不到一个例子。

最佳答案

你可以试试这个:

import pandas as pd
import numpy as np

df = pd.DataFrame({'a': ['abc', 'abc', 'abc', 'abc'], 
                   'b': [2,np.nan, 0, 6], 
                   'c': [1, 0, 2, 0]})

inc = 0.01
df.loc[:, df.dtypes.ne('object')] += inc
df.replace({inc:0}, inplace=True)        

print(df)

或者按照 Tai 与 np.where 的建议(这应该更快):
cols = df.columns[df.dtypes.ne('object')]
df[cols] += np.where(df[cols] >0, 0.01, 0)

返回:
     a     b     c
0  abc  2.01  1.01
1  abc   NaN  0.00
2  abc  0.00  2.01
3  abc  6.01  0.00

关于python - 更改 Pandas DataFrame 中的特定值(其中有混合类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50571570/

相关文章:

python - Minio上传功能的进度对象是什么?

python - 如何自动完成搜索表单?

python - 每月、每年分组的值计数 - Pandas

python - 使用带有 groupby 和 group-specific bins 的 pandas cut 函数

python - 将元组的嵌套列表转换为元组中第一个元素的嵌套列表

javascript - 如果不包含特定单词,如何匹配正则表达式?

python - 每组值的按列串联

python - Pandas Dataframe 匹配行之间的日期

python - 如何将此 DataFrame 转换为按索引值平均得分的 DataFrame?

dataframe - 如何将 Julia DataFrame 列中的数值转换为缺失值?