在对Pandas DataFrame进行筛选和更新时,会出现SettingWithCopyWarning吗?

编程语言 2026-07-09

我在对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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章