【问题标题】:Pandas - SettingWithCopyWarning in a loop [duplicate]Pandas - 循环中的 SettingWithCopyWarning [重复]
【发布时间】:2021-07-16 23:16:51
【问题描述】:

我收到以下代码的警告。它似乎与我插入新列的行和循环有关。我已经看到与此错误有关的其他帖子,但不幸的是,我是一个完全的新手,看不出我的问题是什么。警告明确表示“尝试使用 .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)

【问题讨论】:

标签: python pandas loops pycharm


【解决方案1】:

确实在这一行:

gdp_ire = gdp_data[gdp_data['LOCATION'] == "IRL"]

您正在选择全局数据框的一部分,并且在下面的行中,您正在修改此子集。

一个简单的解决办法是:

gdp_ire = gdp_data[gdp_data['LOCATION'] == "IRL"].copy()

【讨论】:

  • 我完全看错地方了,而且解决起来很简单。非常感谢。
猜你喜欢
  • 2014-12-30
  • 2014-10-18
  • 2017-06-25
  • 1970-01-01
  • 2017-12-18
  • 2017-07-15
相关资源
最近更新 更多