我有一个带有列结构的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。我无法提供我的数据片段,因为它是实时数据。
答案 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
。