日付と時刻の値の列と測定値(浮動小数点)を含む別の列を含むデータセットがあります。しかし、いくつかの測定中にエラーが発生し、いくつかの奇妙なエントリが発生しました。これらのエントリには、文字列、完全ではない文字列、欠損値、または値として解釈されるdatetimeオブジェクトの繰り返し部分が含まれます。 (測定値はほとんど10と50の間であるが、時々私は100のようにゼロまたは値を取得する)範囲外の方法である他のカラム(パンダのデータフレームとしてロード)大きなデータセットから種類と値に基づいてパンダデータフレームの「不良」行を削除します
エキス:
障害のあるエントリのすべてのタイプの t baaa
0 13/11/2014 23:43 17.6
1 13/11/2014 23:44 17.7
2 2014-11-13 23:452014-11-13 23:45:00 17.7
3 13/11/2014 23:46 17.7
4 14/11/2014 00:34 16
5 14/11/2014 00:35 15.9
6 :00 17.7
7 14/11/2014 01:25 14.9
8 14/11/2014 01:26 14.9
9 0 80
10 14/11/2014 02:16 14.3
11 14/11/2014 02:17 14.3
12 NaN AA550112209500080009002855AA
13 14/11/2014 03:09 13
14 009000B002B55AA NaN
15 14/11/2014 02:19 14.3
16 14/11/2014 03:59 12.6
17 14/11/2014 04:00 12.6
18 14/11/2014 05:41 11.7
19 14/11/2014 05:42 11.7
20 0 140
21 14/11/2014 04:53 12.2
例はここにある。私は、障害のある行を取り除くことができますどのように ? 私の考えは、共同を設定し、もしループを行うことでした't'列はdatetimeオブジェクトでなければならず、 'baaa'列はfloat> 0と<です。条件が満たされない場合、値を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)
これはラインは私が間違った構文を持っている必要があります 60よりも低いことが必要であるという条件以外の問題のほとんどを解決しているようですか?またはここで何が間違っていますか? ありがとう!