1

'let'DataFrame london(別のコピーno_eco) の列を、メソッド内の文字列のみを含む行に置き換えようとしていますcontains()。コードは次のとおりです。

london = no_eco
london.loc[:,'let'] = london.loc[:,'let'].str.contains('E' or 'D' or 'F' or 'G' or 'H' or 'I' or 'J')
london.loc[:,'let'] = london.loc[:,'let'][london.loc[:,'let']]
london = london.dropna(subset = ['let'])
print(london)

コードは機能し、文字列が一致しない行を削除しましたが、次の警告が表示されます。

C:\Users\gerardchurch\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\indexing.py:543: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas- docs/stable/indexing.html#indexing-view-versus-copy

ドキュメントを見ても、何が間違っているのかまだ理解できません。

変数を使用し続けても大丈夫londonですか、それとも将来問題が発生しますか?

ありがとう。

4

1 に答える 1

2

コードにはいくつかの問題があります。

  1. london = no_ecoにコピーを割り当てませんlondon。明示してください: london = no_eco.copy().
  2. pd.Series.str.containsはデフォルトで正規表現をサポートしているため、 を使用してstr.contains('E|D|F|G|H|I|J|')ください。
  3. あなたの論理は混乱しています。最初にobjectdtype シリーズをブール シリーズに置き換えてから、それ自体でインデックス付けされたサブセットをそれに割り当ててから、nulldropna用に設計された を使用します。

代わりに、ブール シリーズをpd.DataFrame.loc作成し、ブール インデックスで使用します。

london = no_eco.copy()
london = london.loc[london['let'].str.contains('E|D|F|G|H|I|J|')]

この特定のケースでは、pd.DataFrame.__getitem__( df[]syntax) を直接使用できます。

london = no_eco.copy()
london = london[london['let'].str.contains('E|D|F|G|H|I|J|')]
于 2018-11-07T14:54:01.317 に答える