python - SettingWithCopyWarning:试图在 DataFrame 中的切片副本上设置值。尝试使用 .loc[row_indexer,col_indexer] = value 代替,
问题描述
这是我的代码,当我尝试运行它时,我收到此错误“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”请帮忙。我应该怎么办 ?temp_df 是 train_df 的副本,它是主数据帧 (Paris_AirBNB) 的一部分
np.random.seed(1)
paris_listings = pd.read_csv("paris_airbnb.csv")
paris_listings = paris_listings.loc[np.random.permutation(len(paris_listings))]
stripped_commas = paris_listings['price'].str.replace(',', '')
stripped_dollars = stripped_commas.str.replace('$', '')
paris_listings['price'] = stripped_dollars.astype('float')
train_df = paris_listings.iloc[0:6000]
test_df = paris_listings.iloc[6000:]
def predict_price(new_listing):
temp_df = train_df.copy()
temp_df['distance'] = temp_df['accommodates'].apply(lambda x: np.abs(x - new_listing))
temp_df = temp_df.sort_values('distance')
nearest_neighbor_prices = temp_df.iloc[0:5]['price']
predicted_price = nearest_neighbor_prices.mean()
return predicted_price
test_df['predicted_price'] = test_df['accommodates'].apply(lambda x: predict_price(x))
test_df.head()
解决方案
有多种方法可以“解决”这个问题。目前,当您使用 时test_df = paris_listings.iloc[6000:]
,这确实是原始数据帧的一部分,因此当您稍后通过添加新列对其进行修改时,Pandas 不清楚这是否会/可能也会修改原始数据帧(很可能会't)。
解决方案 1
通过指定: test_df = paris_listings.iloc[6000:].copy()确保它test_df
实际上是 a copy
ofparis_listings
根据数据的大小,这最终可能会在内存中复制您的数据并不必要地占用空间。
解决方案 2
确保您始终按照文档中的建议使用.loc
或表示法。这意味着使用:.iloc
test_df.loc[:, 'predicted_price'] = test_df.loc[:,'accommodates'].apply(lambda x: predict_price(x))
以及函数内部:
temp_df.loc[:, 'distance'] = temp_df.loc[:, 'accommodates'].apply(lambda x: np.abs(x - new_listing))
解决方案 3(不是真正的解决方案,但可以)
如果您认为这不是一个真正的问题,并且如果程序实际修改了您的原始数据框,您可以忽略和/或取消警告,因为它是您要添加的新列。不推荐,因为这可能是不可预测的。
推荐阅读
- google-sheets - Google 表格可用性图表公式
- python - 每次我想在 sqlalchemy 中添加新列时,我应该 drop_all() 吗?
- javascript - 我想从 Xencall CRM 向 Zillow 发出一个 API 请求,它给了我错误“被 CORS 策略阻止:没有 'Access-Control-Allow-Origin' 标头
- sql - 有没有办法对 Oracle SQL 查询的结果集中的数据进行非规范化
- java - 2个语句有什么区别?关于如何使用java 8流
- reactjs - Axios TypeError 中的 HTTP 失败:无法读取未定义的属性“reduxSourceAction”
- android - 如何绕过 Android 应用的 SSL Pinning
- r - 在 R Shiny 中绘制 HeatMap 的问题
- python-3.x - 是否可以编写一个 python 脚本,将 wifi 速度和其他此类信息被动地发送到谷歌表格或电子邮件?
- python - Plotly 库没有显示任何内容