使用 loc 更新数据框 python pandas
Posted
技术标签:
【中文标题】使用 loc 更新数据框 python pandas【英文标题】:Use of loc to update a dataframe python pandas 【发布时间】:2016-04-02 15:51:26 【问题描述】:我有一个带有列结构的熊猫数据框(df):
month a b c d
此数据框包含一月、二月、三月、四月的数据。A、B、C、D 是数字列。对于二月份,我想重新计算 A 列并在数据框中更新它,即月份 = 二月,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。我无法提供我的数据的 sn-p,因为它是实时数据。
【问题讨论】:
你能附上你的数据框的一个小例子吗? @AntonProtopopov :我正在处理的数据框很大,我试图在这里解释逻辑。我会看看我是否可以创建任何数据框 您可以使用df.head()
或df.iloc[:10, :10]
附加数据框的一部分
为什么不只是df['a'] = df.b + df.c + df.d
?您需要包含示例数据以阐明您要执行的操作并生成 MVE。 How to Ask
Anton 和 Alexander:这是一个示例数据框:import pandas as pd import numpy as np dates = pd.date_range('1/1/2000', period=8) df = pd.DataFrame( np.random.randn(8, 4), index=dates, columns=['A', 'B', 'C', 'D']) 我想更新一个日期:2000-01-03。我无法提供我的数据的 sn-p,因为它是实时数据。
【参考方案1】:
从警告中可以看出,您应该使用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']
【讨论】:
【参考方案2】:虽然不是最漂亮的,但我实现您的目标的方式(无需显式迭代行)是:
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
。
【讨论】:
以上是关于使用 loc 更新数据框 python pandas的主要内容,如果未能解决你的问题,请参考以下文章