需要强调的是,这与删除行无关。
在一个简单的情况下,我有一个来自传感器的文件:
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]})
感谢您的光临!
答案 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