2017-02-12 25 views
0

をSettingWithCopyWarning避けることができない:パンダは、私はこのようなデータフレームを持っている

A  B  C 

15 'ds' ' 0.000' 
32 'ds' ' 1.000' 
56 'ds' ' 2,700.000' 
45 'gb' ' 7.000' 

私は整数に列Cの値を変更したいです。そう私は何をやっていることは、このようなものです:

df.loc[:,'C'] = df.loc[:,'C'].apply(lambda x: int(float(x.strip().replace(',','')))) 

これは、仕事をする、しかし、私はその迷惑SettingWithCopyWarningを取得します。 locを使用している場合はなぜこのように表示されますか?

答えて

0

私は、次のアプローチを使用したい:割り当ての順序に基づいて、あなたはコピーにを割り当てることができたときに、

In [292]: df['C'] = pd.to_numeric(df['C'].str.strip().str.replace(',', ''), errors='coerce') 

In [293]: df 
Out[293]: 
    A B  C 
0 15 ds  0.0 
1 32 ds  1.0 
2 56 ds 2700.0 
3 45 gb  7.0 

In [294]: df.dtypes 
Out[294]: 
A  int64 
B  object 
C float64 
dtype: object 
0

パンダは、偽陽性(すなわちといくつかのケースでは、この警告を発生させ、現在のシナリオではそうではありません)。この答えは便利です:私は.locを使用して、まだ警告を受けていたときに、個人的には、How to deal with SettingWithCopyWarning in Pandas?

...しかし、私は上記の答えで提供されるステップを取ると警告無効: pd.options.mode.chained_assignment = None

関連する問題