2017-08-07 54 views
0

我做下面的更新數據幀的一行:更新大熊貓據幀行中的變量

val = "123" 
row = df.loc[id, :] 
t = type(row['col1']) 
val = t(val) 
df.loc[id, 'col1'] = val 

如果我行[「COL1」] = VAL,它不會更新原始數據幀。有沒有辦法更新原始數據框而不使用.loc兩次?

回答

0

更新了的評論如下
相信短期答案是否定的,以

有什麼方法說:「改變你已經獲取行」

這是因爲Pandas中的操作將原始數據框的視圖複製到視圖中。 JeffR寫了一篇StackOverflow文章,他寫了大部分熊貓圖片here

如果您試圖將val分配給DataFrame中的一個單元格,則可以使用set_value函數。該方法的文檔是here

val = "123" 
row = df.loc[id, :] 
t = type(row['col1']) 
val = t(val) 
df.set_value(id, 'col1', val) 

如果你想給val與特定數據類型分配給列所有單元格,可以使用應用方法

def changeType(cell, val): 
    # You could pass the id or list of ids as well if you need to perform some logic with it 
    t = type(cell) 
    cell = t(val) 
    return cell 

val = "123" 
df.loc[:, 'col1'] = df.loc[:, 'col1'].apply(changeType, args=(val,)) 
+0

df.loc [:,「COL1」] = VAL會爲所有行設置它,對吧?我只想要更新行匹配id。 set_value看起來像它會做我所需要的,但它不會需要另一個查找?有沒有說「改變你已經提取的行」,而不是「用這個id查找行,並改變它」? – ashic

+0

我已經更新了我的答案,我更好地理解了你想問的問題。 – Josh