You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何消除Pandas DataFrame操作中的SettingWithCopyWarning警告

解决Pandas的SettingWithCopyWarning警告

原代码

import pandas as pd
import datetime as dt
from pathlib import Path

#%% Specify the path and load the data
path = Path('./../')

# Load the data
data = pd.read_csv(path / 'data/data.csv')
data.loc[:,'Date'] = pd.to_datetime(list(data['Date_x']), format='%Y-%m-%d').date 

触发的警告

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
data.loc[:,'Date'] = pd.to_datetime(list(data['Date_x']), format='%Y-%m-%d').date

解决方案

出现该警告的核心原因是Pandas检测到你可能在一个DataFrame的切片副本上修改数据,而非原始DataFrame。以下是两种无警告的修复方式:

方式1:创建独立副本

读取数据后直接生成副本,确保后续操作在独立的DataFrame上执行:

import pandas as pd
import datetime as dt
from pathlib import Path

path = Path('./../')

# 读取数据并创建副本
data = pd.read_csv(path / 'data/data.csv').copy()
# 转换日期并赋值
data['Date'] = pd.to_datetime(data['Date_x'], format='%Y-%m-%d').dt.date

方式2:使用assign生成新列

通过assign方法返回包含新列的新DataFrame,避免直接修改原对象:

import pandas as pd
import datetime as dt
from pathlib import Path

path = Path('./../')

data = pd.read_csv(path / 'data/data.csv')
# 生成带新列的新DataFrame
data = data.assign(Date=pd.to_datetime(data['Date_x'], format='%Y-%m-%d').dt.date)

额外优化说明

  • 无需将data['Date_x']转为列表,直接传入pd.to_datetime即可正常处理
  • 使用.dt.date替代.date,这是Pandas Series访问日期属性的标准方式,更符合Pandas的API规范

内容的提问来源于stack exchange,提问作者TRK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:00:05