2016-08-04 11 views
1

がここに私のDFである:今Pythonのパンダ:場所に基づいて値を置き換えるものではありませインデックス値

In[12]: df = pd.DataFrame(data = list("aabbcc"), columns = ["s"], index=range(11,17)) 
In[13]: df 
Out[13]: 
    s 
11 a 
12 a 
13 b 
14 b 
15 c 
16 c 

、インデックス値に基づいて値を置き換える:

In[14]: df.loc[11, "s"] = 'A' 
In[15]: df 
Out[15]: 
    s 
11 A 
12 a 
13 b 
14 b 
15 c 
16 c 
In[16]: df.ix[12, "s"] = 'B' 
In[17]: df 
Out[17]: 
    s 
11 A 
12 B 
13 b 
14 b 
15 c 
16 c 

は同じベースを行うことが可能です位置でないインデックス値、このような何かが、それはとValueErrorを示し(ValueError: Can only index by location with a [integer, integer slice (START point is INCLUDED, END point is EXCLUDED), listlike of integers, boolean array]):

In[18]: df.iloc[1, "s"] = 'b' 

そして、私はこのような何かしようとした場合:

df.s.iloc[1] = "b" 

を私はこの警告を受ける:

SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame 
+2

文字列で整数ベースのインデックスを使用しようとしているため、最初のエラーが発生しています。 'df.iloc [1、0] = 'b''を試してください。これはあなたが実行している完全なコードですか? 'df.siloc [1] =" b "'は実行時にエラーを生成しません。 'df'が別のデータフレームをスライスして作成されている場合には、警告が表示されることが予想されます。 – johnchase

+0

@johnchase:優れた説明、ありがとう:) – ramesh

答えて

3

あなたは列の位置を取得し、ILOCにそれを渡すためにget_locを使用することができます。

df.iloc[1, df.columns.get_loc('s')] = 'B' 

df 
Out: 
    s 
11 a 
12 B 
13 b 
14 b 
15 c 
16 c 

あるいは他の方法で回避:F

df.loc[df.index[1], 's'] = 'B' 
+0

はい、これは動作しています:) – ramesh

関連する問題