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

修改Pandas DataFrame列时出现SettingWithCopyWarning的问题求助

解决Pandas的SettingWithCopyWarning问题:.loc与.copy无效的情况

问题说明

使用Pandas 2.2.2及Python 3.12,修改DataFrame列时触发SettingWithCopyWarning。已尝试按照官方建议使用.loc[]赋值、对DataFrame调用.copy()规避视图修改,但警告仍然存在。

简化问题代码:

data = pd.read_csv(gps_file)
data = data[['cts', 'GPS (Lat.) [deg]', 'GPS (Long.) [deg]', 'GPS (2D) [m/s]']]
data['time'] = ((data['cts'] - data['cts'][0]) / 1000).round(2)

示例复现代码

以下是可复现该警告的示例代码:

import pandas as pd

# 用于复现问题的示例数据
data = pd.DataFrame({
    'cts': [100, 200, 300, 400, 500],
    'GPS (Lat.) [deg]': [32.0, 32.1, 32.2, 32.3, 32.4],
    'GPS (Long.) [deg]': [34.0, 34.1, 34.2, 34.3, 34.4],
    'GPS (2D) [m/s]': [1.0, 1.1, 1.2, 1.3, 1.4]
})

# 创建副本试图避免视图相关问题
new_data = data.copy()
# 选择相关列
new_data = new_data[['cts', 'GPS (Lat.) [deg]', 'GPS (Long.) [deg]', 'GPS (2D) [m/s]']]
# 计算新列'time'
new_data.loc[:, 'time'] = ((new_data['cts'] - new_data['cts'].iloc[0]) / 1000).round(2)

实际数据加载方式

实际场景中的数据加载逻辑如下:

# 设置包含数据文件夹的根目录
base_dir = './sample_data'
# 初始化存储数据的字典
data_dict = {}

# 遍历根目录下的每个文件夹
for folder in os.listdir(base_dir):
    folder_path = os.path.join(base_dir, folder)
    if os.path.isdir(folder_path):
        # 为当前文件夹创建字典条目
        data_dict[folder] = {}
        # 加载GPS文件
        for i in range(1, 5):
            experiment_key = f'Experiment_{i}'
            gps_file = os.path.join(folder_path, f'{i}p.csv')
            if os.path.exists(gps_file):
                gps_data = pd.read_csv(gps_file)

可行解决方案

通过明确使用.loc选取列和行,确保操作对象为原DataFrame而非视图,可消除警告:

data = data[['cts', 'GPS (Lat.) [deg]', 'GPS (Long.) [deg]', 'GPS (2D) [m/s]']]
time = ((data.loc[:,['cts']] - data.loc[0,['cts']]) / 1000).round(2)
data.loc[:,['time']] = time

关键说明

这里的核心是:

  • 计算time时,用.loc[:, ['cts']]选取整列,用.loc[0, ['cts']]选取首行的cts值,确保操作的是DataFrame的明确引用而非切片产生的视图
  • 赋值时使用.loc[:, ['time']],明确指定要修改的是原DataFrame的列,避免隐式操作视图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:57:03