パンダ:どのシリーズに英数字以外の列を削除します

アレックス・リトル:

Aパンダシリーズは、無効な値を含めることができます。

a     b     c     d      e      f     g 
1    ""   "a3"  np.nan  "\n"   "6"   " "
df = pd.DataFrame([{"a":1, "b":"", "c":"a3", "d":np.nan, "e":"\n", "f":"6", "g":" "}])
row = df.iloc[0]

私は含まれていた列のみに保つクリーンシリーズ生産したい数値または非空の非スペースのみの英数字の文字列を

  • b それは空の文字列であるために廃棄されるべきです。
  • dなぜならnp.nan
  • eそして、gスペースのみの文字列のため。

期待される結果:

a      c     f
1    "a3"   "6"

どのように私は数字または有効な英数字を含む列をフィルタリングすることができますか?

  • row.str.isalnum()リターンNaNのためのa代わりに真の私のは、予想されます。
  • row.astype(str).str.isalnum()変更内容dnp.nan文字列に"nan"し、後で有効な文字列と見なします。
  • row.dropna()もちろんのみ低下dnp.nan)。

私は、に掲載されているので、他の多くの可能性が表示されないhttps://pandas.pydata.org/pandas-docs/stable/reference/series.htmlを

回避策として、私はアイテムのループ()タイプと内容を確認することができます、と私は維持したい値から新しいシリーズを作成し、このアプローチは、非効率的な(そして醜い)です。

for index, value in row.items():
    print (index, value, type(value))


# a 1 <class 'numpy.int64'>
# b  <class 'str'>
# c a3 <class 'str'>
# d nan <class 'numpy.float64'>
# e 
#  <class 'str'>
# f 6 <class 'str'>
# g   <class 'str'>

私はいいの列を選び出すために助けることができる任意のブールフィルタはありますか?

エズレル:

文字列に値を変換し、別のマスクをチェーンSeries.notnaビット単位でAND- &

row = row[row.astype(str).str.isalnum() & row.notna()]
print (row)
a     1
c    a3
f     6
Name: 0, dtype: object

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=4790&siteId=1