在对Pandas DataFrame进行筛选和更新时,会出现SettingWithCopyWarning吗?
我在对Pandas DataFrame进行筛选后,想要更新其中某一列的数值,但我总是会得到一个 SettingWithCopyWarning。虽然这段代码有时会工作,但我想知道避免这个警告的最佳做法,并确保我没有在对切片进行修改。
import pandas as pd
# Sample Data
data = {'City': ['New York', 'London', 'Tokyo', 'Paris'],
'Temperature': [25, 15, 28, 22]}
df = pd.DataFrame(data)
# Filtering for cold cities
cold_cities = df[df['Temperature'] < 20]
# Attempting to update the 'City' name
cold_cities['City'] = 'Cold ' + cold_cities['City']
print(cold_cities)
解决方案
基本原因是在这里使用了链式赋值。布尔掩码本质上只是一个视图。困惑点在于应该更新视图还是原始数据。更好的做法是使用.loc,或者创建一个显式副本。
# Create a standalone subset
cold_cities = df[df['Temperature'] < 20].copy()
# Now you can modify without warnings
cold_cities['City'] = 'Cold ' + cold_cities['City']
print(cold_cities)
或者
(explicitly modifies original)
cold_cities = "Cold "+ df.loc[df['Temperature'] < 20,'City']
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。