我有一个 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/