Python 在DataFrame上使用.loc,同时忽略几行
我有一个数据框,需要根据其中一个列值进行修改。特别是,当列Python 在DataFrame上使用.loc,同时忽略几行,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框,需要根据其中一个列值进行修改。特别是,当列a中的值高于110时,我希望将列b的值赋值为-99。唯一的问题是dataframe的前3行包含字符串和数字数据类型的混合,因此当我尝试时: df.loc[df['a'] >= 110, 'b'] = -99 我得到一个TypeError,因为不允许在str和int之间进行比较 所以我的问题是:如何在忽略数据帧的前3行的情况下完成这个赋值 到目前为止,我想出了一个相当狡猾的办法: try: df.loc[df['a'] &g
a
中的值高于110时,我希望将列b
的值赋值为-99。唯一的问题是dataframe的前3行包含字符串和数字数据类型的混合,因此当我尝试时:
df.loc[df['a'] >= 110, 'b'] = -99
我得到一个TypeError
,因为不允许在str
和int
之间进行比较
所以我的问题是:如何在忽略数据帧的前3行的情况下完成这个赋值
到目前为止,我想出了一个相当狡猾的办法:
try:
df.loc[df['a'] >= 110, 'b'] = -99
except TypeError:
pass
这似乎是可行的,但显然这似乎不是正确的方法
编辑:而且这个方法只跳过前3行,但我真的需要保持它们的原样。试试:
df.loc[df['a'].apply(pd.to_numeric,errors='concurve').ge(110),'b']=-99
或者使用
errors='ignore'
我想保持前三行的数据不变。是否将应用(pd.to_numeric,errors='coerse')
将数据替换为一堆NaN
?复制前3行并在该操作后重新追加当我尝试按您建议的方式执行时,我收到一个奇怪的错误:ValueError:invalid error value specified
。虽然如果我做了errors='ignore'