2017-02-27 53 views
2

說我有系列pd.Series({'a':1,'b':2','c':3}),我想編輯第一個值,我可以撥打pd.Series({'a':1,'b':2,'c':3}).set_value('a',0)pandas中是否有函數語法來設置基於整數位置的一系列值?

是否有類似的函數可以接受整數位置而不是索引標籤?

I.e.我想這樣做

s = pd.Series({'a':1,'b':2,'c':3}).set_value(0,0) 

也有辦法使這不會改變原始數據幀。我想我想要的是DataFrame.assign精神上的東西,但它是按行進行操作的。

回答

2

您可以通過設置takeable=True來使用數字索引。

s = pd.Series({'a':1,'b':2,'c':3}).set_value(0,0, takeable=True) 
+0

這很晦澀! – maxymoo

1

set_value變異原來的熊貓數據幀或系列:

ser = pd.Series({'a':1,'b':2,'c':3}) 
new_ser = ser.set_value(0,0) 

print(new_ser is ser) 
True 

您必須手動創建一個副本:

ser = pd.Series({'a':1,'b':2,'c':3}) 
new_ser = ser.copy() 
new_ser.set_value(0,0) 

print(new_ser is ser) 
False 

要通過自己的索引位置設定值,則可以@Batman指出,使用set_value時可帶= True。您也可以使用它明確設計的指數位置與參照值iat(在指數):

# create copy and set value via iat 
new_ser = ser.copy() 
new_ser.iat[0] = 0 

性能在這個例子set_value好一點:

%%timeit 
new_ser = ser.copy() 
new_ser.set_value(0,0, takeable=True) 
10000 loops, best of 3: 53.4 µs per loop 

%%timeit 
new_ser = ser.copy() 
new_ser.iat[0] = 0 
10000 loops, best of 3: 63.6 µs per loop 
相關問題