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

修改DataFrame日期格式遇警告及日期筛选需求的技术求助

解决SettingWithCopyWarning并实现日期格式转换与筛选

为什么会触发SettingWithCopyWarning?

这个警告是因为你直接操作了DataFrame的视图(比如通过切片、过滤得到的子集),而非独立的副本。Pandas无法确定你是想修改原数据还是子集,所以抛出警告。

完整解决方案

1. 先创建DataFrame副本(消除警告)

不管你是操作全量数据还是子集,先显式创建副本,彻底避免视图操作:

# 假设原DataFrame名为df,创建独立副本
df_processed = df.copy()

2. 转换日期列为datetime类型

必须先把Order_Date和Ship_Date转成datetime类型——这是正确比较日期大小的前提,也方便后续格式化:

# 转换为datetime(如果原数据是字符串,要指定原格式,比如原格式是mm/dd/yyyy就加format='%m/%d/%Y')
df_processed['Order_Date'] = pd.to_datetime(df_processed['Order_Date'])
df_processed['Ship_Date'] = pd.to_datetime(df_processed['Ship_Date'])

3. 筛选Ship_Date >= Order_Date的行

基于datetime类型做比较,这才是可靠的日期判断方式:

df_filtered = df_processed[df_processed['Ship_Date'] >= df_processed['Order_Date']]

4. 格式化为dd-mm-yyyy字符串

如果需要将日期列转为指定格式的字符串,用dt.strftime:

df_filtered['Order_Date'] = df_filtered['Order_Date'].dt.strftime('%d-%m-%Y')
df_filtered['Ship_Date'] = df_filtered['Ship_Date'].dt.strftime('%d-%m-%Y')

提示:如果之后还要做日期运算,建议保留datetime类型的列,新增一列存格式化后的字符串(比如Order_Date_str),避免丢失日期的计算能力。

完整可运行代码

import pandas as pd

# 示例原数据
data = {
    'Order_Date': ['01/12/2023', '03/05/2023', '10/01/2023'],
    'Ship_Date': ['05/12/2023', '01/05/2023', '15/01/2023'],
    'Product': ['A', 'B', 'C']
}
df = pd.DataFrame(data)

# 1. 创建副本
df_processed = df.copy()

# 2. 转datetime类型(原格式是mm/dd/yyyy)
df_processed['Order_Date'] = pd.to_datetime(df_processed['Order_Date'], format='%m/%d/%Y')
df_processed['Ship_Date'] = pd.to_datetime(df_processed['Ship_Date'], format='%m/%d/%Y')

# 3. 筛选符合条件的行
df_filtered = df_processed[df_processed['Ship_Date'] >= df_processed['Order_Date']]

# 4. 格式化为dd-mm-yyyy
df_filtered['Order_Date'] = df_filtered['Order_Date'].dt.strftime('%d-%m-%Y')
df_filtered['Ship_Date'] = df_filtered['Ship_Date'].dt.strftime('%d-%m-%Y')

print(df_filtered)

核心要点

  • 用.copy()创建副本是消除SettingWithCopyWarning的最直接方式
  • 日期比较必须依赖datetime类型,字符串比较会因为字符顺序导致错误结果
  • 格式化和筛选的顺序:建议先筛选再格式化,减少不必要的计算量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:55:33