使用loc来更新数据帧python pandas

时间:2015-12-28 19:34:52

标签: python pandas dataframe updating loc

我有一个带有列结构的pandas数据帧(df):

month a b c d

此数据框包含1月,2月,3月,4月的数据.A,B,C,D是数字列。对于2月,我想重新计算A列并在数据框中更新它,即月份= 2月,A = B + C + D

我使用的代码:

 df[df['month']=='Feb']['A']=df[df['month']=='Feb']['B'] + df[df['month']=='Feb']['C'] + df[df['month']=='Feb']['D'] 

这样运行没有错误,但没有更改2月份A列中的值。在控制台中,它给出了一条消息:

  

正在尝试在DataFrame的切片副本上设置值       尝试使用.loc [row_indexer,col_indexer] = value而不是

我尝试使用.loc但是现在我正在使用的数据帧,我已经使用了.reset_index(),我不知道如何设置索引并使用.loc。我按照文档但不清楚。你能帮帮我吗? 这是一个示例数据帧:

 import pandas as pd import numpy as np
 dates = pd.date_range('1/1/2000', periods=8)
 df = pd.DataFrame(np.random.randn(8, 4), index=dates, columns=['A', 'B', 'C', 'D']) 

我想更新说一个日期:2000-01-03。我无法提供我的数据片段,因为它是实时数据。

2 个答案:

答案 0 :(得分:3)

从警告中可以看出,您应该使用 data: { foton : e.value}, 。在对数据进行子集化时,您将获得索引值。您只需要传递row_index然后使用逗号col_name:

loc[row_index, col_index]

答案 1 :(得分:1)

虽然不是最美丽的,但我实现目标的方式(没有明确地迭代行)是:

df.ix[df['month'] == 'Feb', 'a'] = df[df['month'] == 'Feb']['b'] + df[df['month'] == 'Feb']['c']  

注意ix has been deprecated,因为Pandas v0.20.0支持iloc / loc