我有一个混合了列数据类型、float64 和对象的数据框。
我需要动态删除所有具有负值的行。这是我到目前为止所拥有的:
df = df[(df > 0).all(axis=1)]
但因为有些列不是数字,所以它基本上会擦除整个 df。
我怎样才能构建这个只考虑数字列?有太多列需要手动为每一列执行类似的操作,但如果我必须一一执行,这确实有效:
df = df.drop(df[df['col1'] < 0].index, inplace=True)
每当我尝试将其放入循环语句中时,我都会遇到有关将字符串与整数进行比较的错误。
我只想扫描每行的每一列,如果我检测到一个数字,并且它是负数,则删除整行。我觉得我把这件事搞得太难了。
Use select_dtypes https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.select_dtypes.html仅获取数字列,并保留您的代码。
df[df.select_dtypes(include=[np.number]).ge(0).all(1)]
例子:
df = pd.DataFrame({'col1': [1,2,3,4],
'col2': [-1, -2, 3, 4],
'col3': ['a','b','c','d'],
'col4': [1,2,3,4]})
col1 col2 col3 col4
0 1 -1 a 1
1 2 -2 b 2
2 3 3 c 3
3 4 4 d 4
gives
col1 col2 col3 col4
2 3 3 c 3
3 4 4 d 4
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)