【发布时间】:2021-01-25 13:58:16
【问题描述】:
我有一个大型数据框,涵盖 30 个国家/地区 70 年的 GDP 增长情况。数据如下所示:
GDP Country Year
10 US 2000
10.2 US 2001
0 US 2002
10.2 US 2003
10.4 US 2004
10.4 US 2005
我进行了计算,想用存储在名为us_2000 的变量中的浮点数替换第三行中的0。
我尝试过使用
df.loc[(df.Country == "US") & (df.Year == 2002), "GDP"] = us_2000
但它不起作用,我收到以下警告消息:
C:\Users\graha\anaconda3\lib\site-packages\IPython\core\interactiveshell.py:3331: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
exec(code_obj, self.user_global_ns, self.user_ns)
数据是从 API 下载的,不幸的是,该 API 使索引成为带有国家名称和日期时间的可怕字符串。有没有一种方法可以根据 Country 和 Year 值仅重新分配一个值,而无需重置索引?
【问题讨论】:
-
它对我来说没有错误...但是要避免这种情况...我认为最好使用
.where或np.where。以下是语法:df['GDP'] = df['GDP'].where(~((df.Country == "US") & (df.Year == 2002)), us_2000)或df['GDP'] = np.where((df.Country == "US") & (df.Year == 2002), us_2000, df['GDP']) -
好的,谢谢,我试试看。
-
我仍然遇到与上述相同的错误。不过感谢您的帮助!
-
那这行代码是不是这个问题?在对数据框创建 lsice 之前,您应该使用
df1 = df.copy()复制它,然后使用 df1 = etc.. -
好的,谢谢
标签: python pandas dataframe assign