使用loc更新数据帧python pandas

2024-04-19 19:19:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据框(df),具有列结构:

month a b c d

这个数据框包含1月、2月、3月、4月的数据。A、B、C、D是数字列。对于二月,我想重新计算列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'] 

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

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。我无法提供我的数据片段,因为它是实时数据。


Tags: 数据importdataframepandasdfindexvalueas
2条回答

虽然不是最漂亮的,但我实现您的目标的方式(无需显式地遍历行)是:

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

注意ixhas been deprecated自从熊猫v0.20.0以来,赞成iloc/loc

从警告中可以看出,应该使用loc[row_index, col_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'] 

相关问题 更多 >