如何用Python的Pandas将无引号时间戳保存到Excel表格?
解决Pandas生成时间戳并导出Excel的格式问题
问题分析
- 你两次给同一单元格
xls2[column_name][row_number]赋值,最终只会保留end_timestamp,若要将两个时间戳存入同一列,需指定不同行。 - 使用
__str__()转换Timestamp会生成默认格式的字符串,无法自定义时间格式。 - 链式索引
xls2[column_name][row_number]可能触发SettingWithCopyWarning,建议用.at或.loc安全赋值。
解决方案
方案1:生成自定义格式字符串并保存
直接将Timestamp格式化为目标字符串格式后写入Excel:
import pandas as pd import datetime # 生成时间戳并格式化为指定字符串 start_timestamp = pd.Timestamp(2023, 6, 1, 0, 0, 0).strftime("%Y-%m-%d %H:%M:%S") # 示例:生成带指定时分秒的结束时间 end_timestamp = pd.Timestamp(2023, 6, 30, 8, 5, 0).strftime("%Y-%m-%d %H:%M:%S") # 写入同一列的不同行 xls2.at[row_number, column_name] = start_timestamp xls2.at[row_number + 1, column_name] = end_timestamp # 若需将两个时间戳放在同一单元格,可使用分隔符拼接 # xls2.at[row_number, column_name] = f"{start_timestamp} | {end_timestamp}"
方案2:让Excel识别为原生时间类型并设置格式
如果希望Excel将值识别为可编辑的时间类型(而非纯字符串),保留Timestamp类型,再通过ExcelWriter设置单元格格式:
import pandas as pd # 生成Timestamp对象(不转字符串) start_timestamp = pd.Timestamp(2023, 6, 1, 0, 0, 0) end_timestamp = pd.Timestamp(2023, 6, 30, 8, 5, 0) # 写入Excel xls2.at[row_number, column_name] = start_timestamp xls2.at[row_number + 1, column_name] = end_timestamp # 保存时设置时间格式 with pd.ExcelWriter("your_file.xlsx", engine="openpyxl") as writer: xls2.to_excel(writer, index=False) worksheet = writer.sheets["Sheet1"] # 将目标列设置为自定义时间格式(替换为你的列字母,比如'A') column_letter = "A" worksheet.column_dimensions[column_letter].number_format = "yyyy-mm-dd hh:mm:ss"
关键要点
- 用
strftime("%Y-%m-%d %H:%M:%S")自定义时间字符串格式,替代默认的__str__()方法。 - 优先使用
.at[row, col]或.loc[row, col]进行赋值操作,避免链式索引的潜在问题。 - 若需Excel原生时间支持,保留Timestamp类型并设置单元格格式,而非转成字符串。
内容的提问来源于stack exchange,提问作者Asif Ahmed
相关产品推荐
相关产品推荐

