1. ホーム
  2. python

pandas select from Dataframe using startswith

2023-08-27 22:56:58

質問

これは動作します(Pandas 12 devを使用)。

table2=table[table['SUBDIVISION'] =='INVERNESS']

それから私は、私が束を欠いていたので、私は"starts"を使用してフィールドを選択する必要があることに気づきました。 そこで、私がフォローできる限りPandasのドキュメントに従って、私は試してみました。

criteria = table['SUBDIVISION'].map(lambda x: x.startswith('INVERNESS'))
table2 = table[criteria]

AttributeError: 'float' オブジェクトは 'startswith' 属性を持ちません。

そこで、別の構文を試してみましたが、同じ結果でした。

table[[x.startswith('INVERNESS') for x in table['SUBDIVISION']]]

参考 http://pandas.pydata.org/pandas-docs/stable/indexing.html#boolean-indexing Section 4: List comprehensionsとSeriesのmapメソッドも、より複雑な基準を作成するために使用することができます。

何が足りないのでしょうか?

どのように解決するのですか?

あなたは str.startswith DataFrame メソッドを使用すると、より一貫した結果を得ることができます。

In [11]: s = pd.Series(['a', 'ab', 'c', 11, np.nan])

In [12]: s
Out[12]:
0      a
1     ab
2      c
3     11
4    NaN
dtype: object

In [13]: s.str.startswith('a', na=False)
Out[13]:
0     True
1     True
2    False
3    False
4    False
dtype: bool

で、ブーリアンインデックスは問題なく動作します(私はどちらかというと loc を使うのが好きですが、使わなくても同じように動作します)。

In [14]: s.loc[s.str.startswith('a', na=False)]
Out[14]:
0     a
1    ab
dtype: object

.

Series/Columnの要素の1つがfloatで、startswithメソッドを持っていないためAttributeErrorが発生しているようですが、リスト内包でも同じエラーが発生するはずです...。