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
相关产品推荐
相关产品推荐

