gpt4 book ai didi

python - SettingWithCopyWarning 即使使用 .loc[row_indexer,col_indexer] = value

转载 作者:行者123 更新时间:2023-11-28 22:41:30 26 4
gpt4 key购买 nike

这是我得到 SettingWithCopyWarning 的代码行之一:

value1['Total Population']=value1['Total Population'].replace(to_replace='*', value=4)

然后我改为:

row_index= value1['Total Population']=='*'
value1.loc[row_index,'Total Population'] = 4

这仍然给出相同的警告。我该如何摆脱它?

另外,对于我使用过的 convert_objects(convert_numeric=True) 函数,我收到了相同的警告,有什么办法可以避免这种情况。

 value1['Total Population'] = value1['Total Population'].astype(str).convert_objects(convert_numeric=True)

这是我收到的警告消息:

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 the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

最佳答案

如果您使用 .loc[row, column] 并且仍然出现相同的错误,则可能是因为复制了另一个数据帧。你必须使用 .copy()

这是一步一步的错误重现:

import pandas as pd

d = {'col1': [1, 2, 3, 4], 'col2': [3, 4, 5, 6]}
df = pd.DataFrame(data=d)
df
# col1 col2
#0 1 3
#1 2 4
#2 3 5
#3 4 6

创建一个新列并更新它的值:

df['new_column'] = None
df.loc[0, 'new_column'] = 100
df
# col1 col2 new_column
#0 1 3 100
#1 2 4 None
#2 3 5 None
#3 4 6 None

我没有收到错误。但是,让我们根据前一个数据框创建另一个数据框:

new_df = df.loc[df.col1>2]
new_df
#col1 col2 new_column
#2 3 5 None
#3 4 6 None

现在,使用 .loc,我将尝试以相同的方式替换一些值:

new_df.loc[2, 'new_column'] = 100

然而,我又收到了这个可恶的警告:

A value is trying to be set on a copy of a slice from a DataFrame. Tryusing .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

解决方案

在创建新数据框时使用 .copy() 将解决警告:

new_df_copy = df.loc[df.col1>2].copy()
new_df_copy.loc[2, 'new_column'] = 100

现在,您将不会收到任何警告!

如果您的数据框是在另一个数据框之上使用过滤器创建的,请始终使用 .copy()

关于python - SettingWithCopyWarning 即使使用 .loc[row_indexer,col_indexer] = value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32573452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com