这个问题与下面的请求完全相同,但又多了一个转折:
- Pandas:替换数据框中的列值
- pandas 数据框列中值的条件替换
所以,我想设置或有条件地设置 pandas 数据框列值。增加的复杂性是,不是使用字符串常量来寻址数据帧列(df['data1']
),我需要用变量来解决它们(df[var_for_data1]
), 因为我的df
列名已构造。
这是一个非常简化的示例来解释我想要的内容:
df = pd.DataFrame({'data1': np.random.randn(100),'data2': np.random.randn(100)})
print(df.head())
Col = 'data1'
print(df[Col].head())
df.data1 = df.data1 +.1
print(df[Col].head())
# so far so good, now how to do above with variable dataframe column name `Col`
#df.Col = df.Col + .1
问题在代码中,到目前为止一切顺利,现在如何使用可变数据框列名执行上述操作Col
.
下一个问题是如何在上面的赋值中添加一个条件,说做就做if df.data1 >=.25 and df.data1 <= .35:
。当然,使用可变数据框列名来表达它Col
.
您可以使用方括号使用字符串而不是作为属性来访问列名,我还强烈建议您放弃按属性访问列的习惯,因为这可能会导致令人困惑的行为,例如如果您有列名sum
你也是df.sum
将返回方法的地址sum
而不是柱子'sum'
.
So df[Col] = df[Col] + 1
只要列名存在就可以工作。
关于第二个问题,要将数组与标量值进行比较,请使用按位运算符&
, |
and ~
for and
, or
and not
这些将分别返回一个布尔值数组,要使用超过 1 个条件,由于运算符优先级,您需要将条件括在括号中:&
比比较运算符具有更高的优先级。
So:
df[(df[col] >=.25) & (df[col] <= .35)]
应该可以,这会将 df 屏蔽为仅满足两个条件的行
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)