私はNaN
値と浮動小数点値を含む浮動小数点型の列を持っています。 .0
で終わらない値を除外するにはどうすればよいですか?例えば".0"で終わらない表示値Python Pandas
:
Col1
0.7
1.0
1.1
9.0
9.5
NaN
欲望の結果は次のようになります。
Col1
0.7
1.1
9.2
私はNaN
値と浮動小数点値を含む浮動小数点型の列を持っています。 .0
で終わらない値を除外するにはどうすればよいですか?例えば".0"で終わらない表示値Python Pandas
:
Col1
0.7
1.0
1.1
9.0
9.5
NaN
欲望の結果は次のようになります。
Col1
0.7
1.1
9.2
あなたはboolean indexing
を使用することができます。
#convert to string and compare last value
print ((df.Col1.astype(str).str[-1] != '0') & (df.Col1.notnull()))
0 True
1 False
2 True
3 False
4 True
5 False
Name: Col1, dtype: bool
print (df[(df.Col1.astype(str).str[-1] != '0') & (df.Col1.notnull())])
Col1
0 0.7
2 1.1
4 9.5
別ìnt
に変換された値を比較するためのソリューションが、最初の必要性fillna
:
s = df.Col1.fillna(1)
print (df[s.astype(int) != s])
Col1
0 0.7
2 1.1
4 9.5
タイミング:
#[30000 rows x 1 columns]
df = pd.concat([df]*10000).reset_index(drop=True)
def jez2(df):
s = df.Col1.fillna(1)
return (df[s.astype(int) != s])
In [179]: %timeit (df[(df.Col1.astype(str).str[-1] != '0') & (df.Col1.notnull())])
10 loops, best of 3: 80.2 ms per loop
In [180]: %timeit (jez2(df))
1000 loops, best of 3: 1.16 ms per loop
In [181]: %timeit (df[df.Col1 // 1 != df.Col1].dropna())
100 loops, best of 3: 3.04 ms per loop
In [182]: %timeit (df[df['Col1'].mod(1) > 0].dropna())
100 loops, best of 3: 2.58 ms per loop
は、別の方法は、1と剰余を計算するmod(1)
を使用することである。
In [60]:
df[df['Col1'].mod(1) > 0].dropna()
Out[60]:
Col1
0 0.7
2 1.1
4 9.5
ここで我々はmod
の効果を確認、全体の数字は小数部分ながら0
なるままになります:
In [62]:
df['Col1'].mod(1)
Out[62]:
0 0.7
1 0.0
2 0.1
3 0.0
4 0.5
5 NaN
Name: Col1, dtype: float64