CSV文件中日期字段显示为浮点数的问题求助
解决CSV中时间字段被Excel识别为浮点数的问题
先明确:你的Python代码写入的CSV文件本身是完全正确的,那些时间字符串都完整保存了。问题出在Excel自动将类似YYYY/MM/DD HH:MM格式的内容识别为日期时间类型,然后转成了浮点数(Excel里日期时间本质是从1900年1月1日开始计算的天数浮点数)。
下面是几种解决方法:
方法1:给时间字符串加单引号前缀,强制Excel识别为文本
修改写入逻辑,给Time Start和Time End的内容前加一个单引号(这个单引号在Excel中会隐藏,仅作为文本标记):
csv_columns = ['Event ID', 'Time Start', 'Time End'] csv_file = "ets_results.csv" try: with open(csv_file, 'w', newline='') as csvfile: writer = csv.DictWriter(csvfile, fieldnames=csv_columns) writer.writeheader() for data in results: processed_data = { key: f"'{value}" if key in ['Time Start', 'Time End'] else value for key, value in data.items() } writer.writerow(processed_data) except IOError: print("I/O error")
方法2:用pandas写入,指定列类型为字符串
如果可以使用pandas库,代码更简洁,还能直接锁定列类型避免Excel自动解析:
先安装pandas:
pip install pandas
然后编写代码:
import pandas as pd results = [ {'Event ID': 15, 'Time Start': '2022/05/04 17:75', 'Time End': '2022/05/04 18:00'}, {'Event ID': 15, 'Time Start': '2022/05/04 18:00', 'Time End': '2022/05/04 20:50'}, {'Event ID': 0, 'Time Start': '2022/05/06 16:50', 'Time End': '2022/05/06 17:00'}, {'Event ID': 4, 'Time Start': '2022/05/09 15:00', 'Time End': '2022/05/09 15:50'}, {'Event ID': 14, 'Time Start': '2022/06/13 07:75', 'Time End': '2022/06/13 08:00'}, {'Event ID': 4, 'Time Start': '2022/06/15 09:00', 'Time End': '2022/06/15 10:50'}, {'Event ID': 14, 'Time Start': '2022/06/16 02:75', 'Time End': '2022/06/16 03:00'} ] df = pd.DataFrame(results) # 将时间列设为字符串类型 df[['Time Start', 'Time End']] = df[['Time Start', 'Time End']].astype(str) # 写入CSV,设置quoting确保字符串被正确处理 df.to_csv('ets_results.csv', index=False, quoting=1)
方法3:手动调整Excel单元格格式
如果不想修改代码,也可以在Excel中手动修正:
- 打开CSV文件后,选中所有时间列
- 右键选择「设置单元格格式」
- 在弹出窗口中选择「文本」格式,点击确定,浮点数就会还原为原来的时间字符串
内容的提问来源于stack exchange,提问作者Yusuf Falola
相关产品推荐
相关产品推荐

