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

Python中拆分Datetime列后用append添加至DataFrame异常求助

问题解决方案

核心错误原因

你用df.append()的方式是纵向追加行,不是横向合并列,导致原始数据行和拆分后的行混在一起,自然出现大量缺失值,完全偏离了“添加日期、时间列到原DataFrame”的需求。


正确处理步骤

1. 确保日期列是Datetime类型(关键前提)

如果你的DateTimeA/DateTimeB是字符串格式,先转成pandas的Datetime类型,后续操作更可靠:

import pandas as pd

# 转换为Datetime类型(如果原始是字符串)
df['DateTimeA'] = pd.to_datetime(df['DateTimeA'])
df['DateTimeB'] = pd.to_datetime(df['DateTimeB'])

2. 提取日期、时间列(推荐用法)

直接用Datetime类型的dt属性提取,比字符串拆分更稳定,不会因格式差异出错:

# 提取开始日期、时间
df['Start_Date'] = df['DateTimeA'].dt.date
df['Start_Time'] = df['DateTimeA'].dt.time

# 提取结束日期、时间
df['End_Date'] = df['DateTimeB'].dt.date
df['End_Time'] = df['DateTimeB'].dt.time

如果一定要用字符串拆分(不推荐),要改用横向列合并:

# 先转字符串再拆分
df1 = df['DateTimeA'].astype(str).str.split(expand=True)
df1.columns = ['Start_Date', 'Start_Time']

df2 = df['DateTimeB'].astype(str).str.split(expand=True)
df2.columns = ['End_Date', 'End_Time']

# 横向合并列,替代append
df = pd.concat([df, df1, df2], axis=1)

3. 计算行程时长

直接用Datetime列相减得到时长,再按需转换为分钟/小时:

# 计算原始时长(timedelta类型)
df['Trip_Duration'] = df['DateTimeB'] - df['DateTimeA']

# 转换为分钟数
df['Trip_Duration_Minutes'] = df['Trip_Duration'].dt.total_seconds() / 60

# 转换为小时数
df['Trip_Duration_Hours'] = df['Trip_Duration'].dt.total_seconds() / 3600

4. 分析活动周期性

用dt属性提取时间维度特征,比如星期、小时、月份:

# 开始时间的星期几(0=周一,6=周日)
df['Start_Weekday'] = df['DateTimeA'].dt.dayofweek

# 开始时间的小时
df['Start_Hour'] = df['DateTimeA'].dt.hour

# 开始月份
df['Start_Month'] = df['DateTimeA'].dt.month

# 同理可提取结束时间的周期特征
df['End_Weekday'] = df['DateTimeB'].dt.dayofweek
df['End_Hour'] = df['DateTimeB'].dt.hour

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:35:13