time c1 c2
1 2017-07-23 11:39:10 3.385661 3.193302
2 2017-07-23 11:39:20 3.157000 2.912690
3 2017-07-23 11:39:30 3.277145 3.124290
4 2017-07-23 11:39:40 3.126075 2.982679
5 2017-07-23 11:39:50 3.135766 2.985840
6 2017-07-23 11:40:00 3.166134 3.016147
7 2017-07-23 11:40:10 2.487507 2.256214
8 2017-07-23 11:40:20 3.348368 3.158728
9 2017-07-23 11:40:30 3.219001 2.996357
10 2017-07-23 11:40:40 2.862558 2.711170
11 2017-07-23 11:40:50 2.558438 2.346303
12 2017-07-23 11:41:00 3.338989 3.192018
13 2017-07-23 11:41:10 2.674149 2.496557
14 2017-07-23 11:41:20 3.523231 3.315889
15 2017-07-23 11:41:30 2.931527 2.740840
16 2017-07-23 11:41:40 3.078464 2.938004
我有一个如下的数据框。除了时间列之外,如何使用NAN替换大于或小于特定数字的所有值。请建议。
我试图做这样的事情:
cols = df.columns.difference(['time'])
df[df[cols].values < 3.523231)] = np.nan
它没有用。请帮助。
答案 0 :(得分:0)
比如说,您试图过滤3
下的值。您可以使用boolean indexing
:
In [835]: df[cols] = df[cols][df[cols] >= 3]; df[cols].head()
Out[835]:
c1 c2
0 3.157000 NaN
1 3.277145 3.124290
2 3.126075 NaN
3 3.135766 NaN
4 3.166134 3.016147
您还可以使用df.applymap
:
In [836]: df[cols] = df[cols].applymap(lambda x: np.nan if x < 3 else x); df[cols].head()
Out[836]:
c1 c2
0 3.157000 NaN
1 3.277145 3.124290
2 3.126075 NaN
3 3.135766 NaN
4 3.166134 3.016147
答案 1 :(得分:0)
df[cols] = df[cols].mask((df[cols].values < float(to_exclude)), np.nan)
df[cols] = df[cols].mask((df[cols].values > float(to_exclude)), np.nan)