使用 loc 更新数据框 python pandas
Use of loc to update a dataframe python pandas
我有一个 pandas 数据框 (df),其列结构为:
month a b c d
此数据框包含一月、二月、三月、四月的数据。A、B、C、D 是数字列。对于 Feb 月份,我想重新计算 A 列并在数据框中更新它,即对于 month = Feb, A = B + C + D
我使用的代码:
df[df['month']=='Feb']['A']=df[df['month']=='Feb']['B'] + df[df['month']=='Feb']['C'] + df[df['month']=='Feb']['D']
这 运行 没有错误,但没有更改 A 列中 2 月份的值。在控制台中,它给出了一条消息:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
我尝试使用 .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。我无法提供我的数据片段,因为它是实时数据。
正如您从警告中看到的那样,您应该使用 loc[row_index, col_index]
。当您对数据进行子集化时,您会得到索引值。您只需要传递 row_index
然后用逗号 col_name
:
df.loc[df['month'] == 'Feb', 'A'] = df.loc[df['month'] == 'Feb', 'B'] + df.loc[df['month'] == 'Feb', 'C'] + df.loc[df['month'] == 'Feb', 'D']
虽然不是最漂亮的,但我实现你的目标的方式(没有明确地遍历行)是:
df.ix[df['month'] == 'Feb', 'a'] = df[df['month'] == 'Feb']['b'] + df[df['month'] == 'Feb']['c']
注意:ix
因为 Pandas v0.20.0 支持 iloc
/ loc
.
我有一个 pandas 数据框 (df),其列结构为:
month a b c d
此数据框包含一月、二月、三月、四月的数据。A、B、C、D 是数字列。对于 Feb 月份,我想重新计算 A 列并在数据框中更新它,即对于 month = Feb, A = B + C + D
我使用的代码:
df[df['month']=='Feb']['A']=df[df['month']=='Feb']['B'] + df[df['month']=='Feb']['C'] + df[df['month']=='Feb']['D']
这 运行 没有错误,但没有更改 A 列中 2 月份的值。在控制台中,它给出了一条消息:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
我尝试使用 .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。我无法提供我的数据片段,因为它是实时数据。
正如您从警告中看到的那样,您应该使用 loc[row_index, col_index]
。当您对数据进行子集化时,您会得到索引值。您只需要传递 row_index
然后用逗号 col_name
:
df.loc[df['month'] == 'Feb', 'A'] = df.loc[df['month'] == 'Feb', 'B'] + df.loc[df['month'] == 'Feb', 'C'] + df.loc[df['month'] == 'Feb', 'D']
虽然不是最漂亮的,但我实现你的目标的方式(没有明确地遍历行)是:
df.ix[df['month'] == 'Feb', 'a'] = df[df['month'] == 'Feb']['b'] + df[df['month'] == 'Feb']['c']
注意:ix
iloc
/ loc
.