根据条件从DataFrame删除值

时间:2019-07-18 09:11:24

标签: python pandas dataframe

需要强调的是,这与删除行无关。

在一个简单的情况下,我有一个来自传感器的文件:

import pandas as pd

df = pd.DataFrame({'Date': ['15/03/2019 10:00:11.000', '15/03/2019 10:00:12.000' , '15/03/2019 10:00:13.000'],
'Pressure' : [-0.162, -0.162, 1.456],
'Conductivity': [-0.001, -0.001, 7.45],
'Water_Temperature': [7.555, 7.555, 8.22],
'Water_Salinity': [0.004, 0.004, 7.63]})

我需要删除其中'Pressure'<1 (最好不删除'Date')的行中的值(有关缺失值和错误数据的信息也很重要)。

我尝试使用.where方法做到这一点:

condition = df['Pressure'] < 1
droped_df = df.where(condition ," " )

但是它什么也没做。 另外我也不知道如何将条件扩展到其余的列,尤其是在原始文件中还有更多的情况下。

产生的效果应如下所示:

df = pd.DataFrame({'Date': ['15/03/2019 10:00:11.000', '15/03/2019 10:00:12.000' , '15/03/2019 10:00:13.000'],
'Pressure' : [ ,  , 1.456],
'Conductivity': [ ,  , 7.45],
'Water_Temperature': [ ,  , 8.22],
'Water_Salinity': [ ,  , 7.63]})

感谢您的光临!

1 个答案:

答案 0 :(得分:3)

使用DataFrame.mask来设置所有列,而没有首先由DataFrame.iloc选择的条件:

df.iloc[:, 1:] = df.iloc[:, 1:].mask(df['Pressure'] < 1) 
print (df)
                      Date  Pressure  Conductivity  Water_Temperature  \
0  15/03/2019 10:00:11.000       NaN           NaN                NaN   
1  15/03/2019 10:00:12.000       NaN           NaN                NaN   
2  15/03/2019 10:00:13.000     1.456          7.45               8.22   

   Water_Salinity  
0             NaN  
1             NaN  
2            7.63  

如果确实需要空格,请获取带有字符串的混合值数字,因此所有数字运算均会失败:

df.iloc[:, 1:] = df.iloc[:, 1:].mask(df['Pressure'] < 1, '') 
print (df)
                      Date Pressure Conductivity Water_Temperature  \
0  15/03/2019 10:00:11.000                                           
1  15/03/2019 10:00:12.000                                           
2  15/03/2019 10:00:13.000    1.456         7.45              8.22   

  Water_Salinity  
0                 
1                 
2           7.63