Pandas - 循环中的 SettingWithCopyWarning
Pandas - SettingWithCopyWarning in a loop
我收到有关以下代码的警告。它似乎与我插入新列的行和循环都有关。我看过与此错误相关的其他帖子,但不幸的是我是一个完全的新手,看不出我的问题是什么。警告特别指出“尝试使用 .loc... 代替”,但这是我正在做的,所以我不知道问题出在哪里。
我正在使用 pycharm,下面是添加列和循环之前的数据框片段。
如有任何帮助,我们将不胜感激
谢谢
import numpy as np
import pandas as pd
gdp_data = pd.read_csv("GDP Hist.csv")
# data has 2 entries per year for: total in millions & GDP per person
# removing duplicates based on years to leave only total GDP
gdp_data.drop_duplicates(subset=["LOCATION", "TIME"], inplace=True)
# Create list of unneeded columns & remove
unneeded_cols = ["INDICATOR", "SUBJECT", "MEASURE", "FREQUENCY", "Flag Codes"]
gdp_data.drop(columns=unneeded_cols, axis=1, inplace=True)
# print(gdp_data.info())
# Subset for Ireland GDP
gdp_ire = gdp_data[gdp_data['LOCATION'] == "IRL"]
gdp_ire.set_index('TIME', inplace=True)
gdp_ire['Annual%'] = np.nan # insert blank column
# loop through dataframe & calc annual % growth
for i in gdp_ire.index:
if i == 1970:
gdp_ire.loc[i, 'Annual%'] = ""
else:
gdp_ire.loc[i, 'Annual%'] = (gdp_ire.loc[i, 'Value']-gdp_ire.loc[i-1, 'Value'])/gdp_ire.loc[i-1, 'Value']*100
print(gdp_ire)
确实在这一行:
gdp_ire = gdp_data[gdp_data['LOCATION'] == "IRL"]
您正在选择全局数据框的一部分,并且在下面的行中,您正在修改此子集。
一个简单的修复可能是:
gdp_ire = gdp_data[gdp_data['LOCATION'] == "IRL"].copy()
我收到有关以下代码的警告。它似乎与我插入新列的行和循环都有关。我看过与此错误相关的其他帖子,但不幸的是我是一个完全的新手,看不出我的问题是什么。警告特别指出“尝试使用 .loc... 代替”,但这是我正在做的,所以我不知道问题出在哪里。
我正在使用 pycharm,下面是添加列和循环之前的数据框片段。
如有任何帮助,我们将不胜感激 谢谢
import numpy as np
import pandas as pd
gdp_data = pd.read_csv("GDP Hist.csv")
# data has 2 entries per year for: total in millions & GDP per person
# removing duplicates based on years to leave only total GDP
gdp_data.drop_duplicates(subset=["LOCATION", "TIME"], inplace=True)
# Create list of unneeded columns & remove
unneeded_cols = ["INDICATOR", "SUBJECT", "MEASURE", "FREQUENCY", "Flag Codes"]
gdp_data.drop(columns=unneeded_cols, axis=1, inplace=True)
# print(gdp_data.info())
# Subset for Ireland GDP
gdp_ire = gdp_data[gdp_data['LOCATION'] == "IRL"]
gdp_ire.set_index('TIME', inplace=True)
gdp_ire['Annual%'] = np.nan # insert blank column
# loop through dataframe & calc annual % growth
for i in gdp_ire.index:
if i == 1970:
gdp_ire.loc[i, 'Annual%'] = ""
else:
gdp_ire.loc[i, 'Annual%'] = (gdp_ire.loc[i, 'Value']-gdp_ire.loc[i-1, 'Value'])/gdp_ire.loc[i-1, 'Value']*100
print(gdp_ire)
确实在这一行:
gdp_ire = gdp_data[gdp_data['LOCATION'] == "IRL"]
您正在选择全局数据框的一部分,并且在下面的行中,您正在修改此子集。
一个简单的修复可能是:
gdp_ire = gdp_data[gdp_data['LOCATION'] == "IRL"].copy()