Python 删除“;错误的;基于类型和值的数据帧行
我有一个数据集,其中包括一列日期和时间值,另一列包含一些测量值(float)。但是,在一些测量过程中,出现了一个错误,导致了一些奇怪的条目-下面的示例(这些条目包括datetime对象的重复部分,该部分被解释为字符串、不完整的datetime对象、完全随机的字符串、缺失的值或超出范围的另一列的值)(测量值大多在10到50之间,但有时我会得到零或100之类的值) 从大型数据集中提取(加载为数据帧): 所有类型错误条目的示例如下。 我怎样才能排除故障线路? 我的想法是做一个if循环,设置条件“t”列应该是datetime对象,“baaa”列应该是float>0和<60。如果条件不满足,我将用Python 删除“;错误的;基于类型和值的数据帧行,python,pandas,Python,Pandas,我有一个数据集,其中包括一列日期和时间值,另一列包含一些测量值(float)。但是,在一些测量过程中,出现了一个错误,导致了一些奇怪的条目-下面的示例(这些条目包括datetime对象的重复部分,该部分被解释为字符串、不完整的datetime对象、完全随机的字符串、缺失的值或超出范围的另一列的值)(测量值大多在10到50之间,但有时我会得到零或100之类的值) 从大型数据集中提取(加载为数据帧): 所有类型错误条目的示例如下。 我怎样才能排除故障线路? 我的想法是做一个if循环,设置条件“t”列
np.nan
替换该值,并最终使用dropna
函数
df['t'] = pd.to_datetime(df['t'], format = '%d/%m/%Y %H:%M', errors='coerce')
df.iloc[:,1] = pd.to_numeric(df.iloc[:,1], errors='coerce')
for line in df.iloc[:,1]:
if (line < 60) & (line > 0):
line = line
else:
line = np.nan
# not assigning this new value! :(
df = df.dropna(subset = df.columns.values, how='any', inplace=True)
df['t']=pd.to_datetime(df['t'],格式为“%d/%m/%Y%H:%m”,错误为“强制”)
df.iloc[:,1]=pd.to_numeric(df.iloc[:,1],errors='concure')
对于df.iloc[:,1]中的行:
如果(线<60)和(线>0):
直线
其他:
line=np.nan
#未分配此新值!:(
df=df.dropna(子集=df.columns.values,how='any',inplace=True)
这似乎解决了大多数问题,但线路需要低于60的情况除外。
我一定是语法错了?这里怎么了?
谢谢!我认为您需要进行筛选,相反,您可以添加新的(第三个)条件,使用-get all notNaN
列t
NaN
第一列中的值根据第一个和第二个条件进行筛选:
df['t'] = pd.to_datetime(df['t'], format = '%d/%m/%Y %H:%M', errors='coerce')
df.iloc[:,1] = pd.to_numeric(df.iloc[:,1], errors='coerce')
df = df[(df.iloc[:,1] < 60) & (df.iloc[:,1] > 0) & (df['t'].notnull())]
print (df)
t baaa
0 2014-11-13 23:43:00 17.6
1 2014-11-13 23:44:00 17.7
3 2014-11-13 23:46:00 17.7
4 2014-11-14 00:34:00 16.0
5 2014-11-14 00:35:00 15.9
7 2014-11-14 01:25:00 14.9
8 2014-11-14 01:26:00 14.9
10 2014-11-14 02:16:00 14.3
11 2014-11-14 02:17:00 14.3
13 2014-11-14 03:09:00 13.0
15 2014-11-14 02:19:00 14.3
16 2014-11-14 03:59:00 12.6
17 2014-11-14 04:00:00 12.6
18 2014-11-14 05:41:00 11.7
19 2014-11-14 05:42:00 11.7
21 2014-11-14 04:53:00 12.2
df['t']=pd.to_datetime(df['t'],格式为“%d/%m/%Y%H:%m”,错误为“强制”)
df.iloc[:,1]=pd.to_numeric(df.iloc[:,1],errors='concure')
df=df[(df.iloc[:,1]<60)和(df.iloc[:,1]>0)和(df['t'].notnull())]
打印(df)
巴阿
0 2014-11-13 23:43:00 17.6
1 2014-11-13 23:44:00 17.7
3 2014-11-13 23:46:00 17.7
4 2014-11-14 00:34:00 16.0
5 2014-11-14 00:35:00 15.9
7 2014-11-14 01:25:00 14.9
8 2014-11-14 01:26:00 14.9
10 2014-11-14 02:16:00 14.3
11 2014-11-14 02:17:00 14.3
13 2014-11-14 03:09:00 13.0
15 2014-11-14 02:19:00 14.3
16 2014-11-14 03:59:00 12.6
17 2014-11-14 04:00:00 12.6
18 2014-11-14 05:41:00 11.7
19 2014-11-14 05:42:00 11.7
21 2014-11-14 04:53:00 12.2
df['t'] = pd.to_datetime(df['t'], format = '%d/%m/%Y %H:%M', errors='coerce')
df.iloc[:,1] = pd.to_numeric(df.iloc[:,1], errors='coerce')
df = df[(df.iloc[:,1] < 60) & (df.iloc[:,1] > 0) & (df['t'].notnull())]
print (df)
t baaa
0 2014-11-13 23:43:00 17.6
1 2014-11-13 23:44:00 17.7
3 2014-11-13 23:46:00 17.7
4 2014-11-14 00:34:00 16.0
5 2014-11-14 00:35:00 15.9
7 2014-11-14 01:25:00 14.9
8 2014-11-14 01:26:00 14.9
10 2014-11-14 02:16:00 14.3
11 2014-11-14 02:17:00 14.3
13 2014-11-14 03:09:00 13.0
15 2014-11-14 02:19:00 14.3
16 2014-11-14 03:59:00 12.6
17 2014-11-14 04:00:00 12.6
18 2014-11-14 05:41:00 11.7
19 2014-11-14 05:42:00 11.7
21 2014-11-14 04:53:00 12.2