我有一个包含列dtypes,float64和object混合的数据框。
我需要动态删除具有负值的所有行。这是我到目前为止的内容:
df = df[(df > 0).all(axis=1)]
但是由于某些列不是数字列,因此基本上擦除了整个df。
如何构建仅考虑数字列的方法?有太多的列需要手动为每个列执行类似的操作,但是如果我必须按1:1进行操作,这确实可行。
df = df.drop(df[df['col1'] < 0].index, inplace=True)
每当我尝试将其放入循环语句时,都会遇到有关将字符串与整数进行比较的错误。
我只想扫描每行的每一列,如果我检测到一个数字,并且它为负数,则删除整行。我觉得我很难过。
答案 0 :(得分:3)
使用select_dtypes
仅获取数字列,并保留您的代码。
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
给予
col1 col2 col3 col4
2 3 3 c 3
3 4 4 d 4