SettingWithCopyWarning:试图在DataFrame的切片副本上设置一个值。尝试改用.loc [row_indexer,col_indexer] = value

时间:2020-05-18 11:34:46

标签: pandas numpy

问题

  1. 我已阅读所有可能的解决方案,以消除警告“ SettingWithCopyWarning:试图在DataFrame的切片副本上设置一个值。尝试使用.loc [row_indexer,col_indexer] = value代替“

但没有任何效果,我无法摆脱错误消息。

在此先感谢您将投入的时间帮助我,当然还有更多的人

我使用哪些工具

我正在使用kaggle来运行笔记本,配置很简单,我没有加载任何库

目标

我想舍入一列,并用结果创建一个新列

数据

id;    city.coord.lon; city.coord.lat 
12957; 4.32664;        51.219791    
12958; 3.33848;        50.812679 
12959; 3.81052;        50.869560

df_weather_in_cities如何创建?

    # load the history city list
    with open(history_city_list_path) as f: 
        d = json.load(f) 

    df_weather_in_cities = pd.json_normalize(d) 


    # filter the belgian cities
    df_cities_weather_in_be = df_weather_in_cities[df_weather_in_cities['city.country']=='BE']

df_weather_in_cities的dtypes是什么?

id                            float64
city.name                      object
city.coord.lon                float64
city.coord.lat                float64
dtype: object

代码#1,在右侧使用.loc


    df_cities_weather_in_be['lat_rounded'] = df_cities_weather_in_be.loc[:,('city.coord.lat')].apply(lambda x: np.round(x, 4))

代码#2,使用简单的列选择


    df_cities_weather_in_be['long_rounded'] = df_cities_weather_in_be['city.coord.lat'].apply(lambda x: np.round(x, 4))

代码#3,在左侧使用.loc


    df_cities_weather_in_be.loc[:,'long_rounded'] = df_cities_weather_in_be['city.coord.lat'].apply (lambda x: np.round(x, 4))

代码#4,在两侧均使用.loc

    df_cities_weather_in_be.loc[:,'long_rounded'] = np.round(df_cities_weather_in_be.loc[:,'city.coord.lat'], 4)

错误

/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py:1: SettingWithCopyWarning:  

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

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy 

"""Entry point for launching an IPython kernel.

0 个答案:

没有答案