首页 > 解决方案 > 使用 pandas 从开始时间和持续时间(分钟)计算结束时间。标准方法错误

问题描述

我有一个熊猫数据框:

开始时间 | 持续时间(分钟)

2018-03-01 16:37:09 | 155

2018-03-01 07:02:10 | 5

2018-03-01 13:07:09 | 250

2018-03-01 20:46:34 | 180

2018-03-01 07:45:49 | 5

我想要输出为

开始时间 | 结束时间2018-03-01 16:37:09 | 2018-03-01 19:12:09

2018-03-01 07:02:10 | 2018-03-01 07:07:10

2018-03-01 13:07:09 | 2018-03-01 17:17:09

2018-03-01 20:46:34 | 2018-03-01 23:46:34

2018-03-01 07:45:49 | 2018-03-01 07:50:49

我正在使用以下代码并根据需要获取 5-10 行的输出并发出警告,当我在完整数据集上应用相同的代码时,它显示错误为 **TypeError: Cannot compare type 'Timestamp' with type 'int' * *

time_temp['End_time'] = pd.DatetimeIndex(time_temp['Start_time']) + pd.to_timedelta(time_temp['Duration'], unit='m')

错误:无法将类型“时间戳”与“int”类型进行比较警告:/usr/local/lib/python3.5/dist-packages/ipykernel_launcher.py:1:SettingWithCopyWarning:试图在一个副本上设置一个值从 DataFrame 切片。尝试改用 .loc[row_indexer,col_indexer] = value

请参阅文档中的注意事项:http: //pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy """启动 IPython 内核的入口点。

标签: pythonpandas

解决方案


您需要更改DatetimeIndexto_datetime删除第一个错误:

无法将“时间戳”类型与“int”类型进行比较**

time_temp['End_time'] = (pd.to_datetime(time_temp['Start_time']) + 
                         pd.to_timedelta(time_temp['Duration'], unit='m'))
print (time_temp)
            Start_time  Duration            End_time
0  2018-03-01 16:37:09       155 2018-03-01 19:12:09
1  2018-03-01 07:02:10         5 2018-03-01 07:07:10
2  2018-03-01 13:07:09       250 2018-03-01 17:17:09
3  2018-03-01 20:46:34       180 2018-03-01 23:46:34
4  2018-03-01 07:45:49         5 2018-03-01 07:50:49

为了避免第二次SettingWithCopyWarning显然需要copy过滤,因为如果您df稍后修改值,您会发现修改不会传播回原始数据(time_temp),并且 Pandas 会发出警告:

time_temp = df[some filtering].copy()

应该还有个问题,看看pandas中settingwithcopywarning怎么处理


推荐阅读