Python中如何将DataFrame的年、月、日列转为日期戳?
把年/月/日列合并为日期戳的正确实现
嘿,我看你想把分散的年份、月份、日期三列合并成一个统一的日期戳列,刚好Pandas有非常方便的工具来做这个,先帮你修正代码里的小问题,再给出两种靠谱的实现方法:
1. 先修正列选择的语法错误
你在筛选df_tx_all列的时候,写法有点小问题:df_tx_all[col_tx_year, col_tx_month, ...] 不符合Pandas的语法,多列筛选需要用双层方括号(把列名放进一个列表里),修正后应该是这样:
df_tx_all = df_tx_all[[ col_tx_year, col_tx_month, col_tx_day, col_tx_customer_id, col_tx_distributor_id, col_tx_product_family, col_tx_gross_sales_quantity, col_tx_gross_sales_valuei, col_tx_net_sales_value, col_tx_discount_values ]]
2. 两种合并成日期戳的方法
方法一:直接用Pandas的自动识别(最简便)
pd.to_datetime()可以直接接收包含年、月、日的DataFrame子集,自动帮你组合成日期戳,这是最省心的方式:
# 直接传入年、月、日三列组成的DataFrame,生成time_stamp列 df_tx_all["time_stamp"] = pd.to_datetime(df_tx_all[[col_tx_year, col_tx_month, col_tx_day]])
这个方法要求你的年、月、日列是数值型(比如年份是2023,月份是5这种),或者是标准格式的字符串,Pandas会自动识别。
方法二:手动拼接字符串后转换(适合自定义格式场景)
如果你的列是不规则的字符串(比如月份是"5"而不是"05"),或者需要指定特定的日期格式,可以先拼接成标准日期字符串再转换:
# 拼接成YYYY-MM-DD格式的字符串,用str.zfill(2)确保月份和日期是两位数 df_tx_all["date_str"] = ( df_tx_all[col_tx_year].astype(str) + "-" + df_tx_all[col_tx_month].astype(str).str.zfill(2) + "-" + df_tx_all[col_tx_day].astype(str).str.zfill(2) ) # 转换为日期戳,指定格式让Pandas更准确识别 df_tx_all["time_stamp"] = pd.to_datetime(df_tx_all["date_str"], format="%Y-%m-%d") # 不需要临时列的话可以删掉 df_tx_all = df_tx_all.drop("date_str", axis=1)
3. 几个需要注意的小细节
- 记得保持变量名一致:你代码里写了
df["time_stamp"],但前面操作的是df_tx_all,这里要统一,不然会报错哦。 - 处理无效值:如果你的年/月/日列有缺失或者无效数据(比如月份是13),可以用
errors参数处理:pd.to_datetime(..., errors="coerce")会把无效值转为NaT(空日期),errors="raise"则会直接抛出错误提醒你清理数据。
内容的提问来源于stack exchange,提问作者Sim re
相关产品推荐
相关产品推荐

