2017-03-22 11 views
0

私は列 '国' がpandas.dataFrame、頭を(持っている)は以下の通りです:Pythonの正規表現 - 検索ドットパンダデータフレーム内

0             tmp 
1      Environmental Indicators: Energy 
2             tmp 
3 Energy Supply and Renewable Electricity Produc... 
4             NaN 
5             NaN 
6             NaN 
7 Choose a country from the following drop-down ... 
8             NaN 
9            Country 

私はこのラインを使用します。

energy['Country'] = energy['Country'].str.replace(r'[...]', 'a') 

変更はありません。 しかし、私はこの行を挿入するとき:

energy['Country'] = energy['Country'].str.replace(r'[...]', np.nan) 

すべての値はNaNです。

なぜ2番目のコードだけが出力を変更しますか?私の目標は三重点だけの栄養価を変えることです。

+0

これは機能しますか? energy ['Country']。replace( '...'、 'a'、inplace = True) –

+0

トリプルドットだけでなく、全体の値を変更する必要があります。 –

答えて

0

「三重点だけでなく、全体の値を変更する必要がある」と言いたいのですが?

mask = df.Country.str.contains(r'\.\.\.', na=False) 
df.Country[mask] = 'a' 
0

.replace(r'[...]', 'a')は、最初のパラメータを正規表現として扱いますが、文字通り扱いたいとします。したがって、.replace(r'\.\.\.', 'a')が必要です。

実際の質問については、.str.replaceには2番目のパラメータとして文字列が必要です。 np.nanを文字列(これは不可能)に変換しようとし、失敗します。私には知られていない理由のため、TypeErrorを発行する代わりに、各行にnp.nanを返します。

+0

私は.replace(r '\。\。\。'、 'a')を試しますが、結果は前と同じです( '...'を持つ値に変更はありません)。 –