You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Python将CSV转为Excel并保留正确的数据类型格式?

解决CSV转Excel时保留数字和日期类型的问题

我来帮你搞定这个问题!你遇到的情况是因为pandas在读取CSV时,没能正确推断出数字和日期列的类型,导致写入Excel时还是以字符串形式保存。下面是具体的解决方案:

问题根源

默认情况下,pandas读取CSV时会自动推断列类型,但如果日期格式不是标准格式(比如你的15-Jul-16),或者CSV中数字列存在特殊情况(比如前导空格、混合字符),就会被识别为字符串(object类型),写入Excel后自然还是字符串格式。

解决方案:读取时明确指定类型和解析规则

我们可以在read_csv时通过参数强制指定列类型、解析日期,确保数据类型正确,再写入Excel就会保留正确格式了。

修改后的代码如下:

import pandas as pd

# 读取CSV,明确指定数字列类型并解析日期
df = pd.read_csv(
    "input.csv",
    # 强制指定rollno和marks为整数类型(如果有缺失值可以用'Int64',支持空值的整数类型)
    dtype={'rollno': int, 'marks': int},
    # 标记需要解析为日期的列
    parse_dates=['doj'],
    # 用明确的日期格式解析,避免pandas推断错误
    date_parser=lambda x: pd.to_datetime(x, format='%d-%b-%y')
)

# 取前3000行
df = df.head(n=3000)

# 保存为Excel,推荐用xlsx格式(比xls更稳定),指定openpyxl引擎
df.to_excel("output.xlsx", index=None, header=None, engine='openpyxl')

关键参数说明

  • dtype:直接指定数字列的类型,确保pandas不会把它们识别为字符串。如果你的数字列存在缺失值,把int换成'Int64'(大写I,支持空值的整数类型)即可。
  • parse_dates:告诉pandas把指定列解析为日期时间类型。
  • date_parser:用自定义的格式字符串%d-%b-%y(对应日-月份缩写-两位年份)来解析日期,确保格式完全匹配你的数据,避免推断错误。
  • engine='openpyxl':因为xlsx格式需要这个引擎支持,它能更好地保留数据类型,比旧的xls格式更可靠。

验证方法

读取数据后,可以用print(df.dtypes)查看各列类型,确认:

  • rollnomarksint64(或Int64)类型
  • dojdatetime64[ns]类型

这样写入Excel后,数字列会是数字类型,日期列会是Excel可识别的日期格式啦!

内容的提问来源于stack exchange,提问作者Aneel kumar

火山引擎 最新活动