使用pd.read_csv读取CSV时数字与日期格式异常问题求助
解决pd.read_csv读取CSV时的数字科学计数法与日期格式问题
15位数字被转为科学计数法的解决办法
CSV是纯文本格式,Excel里修改单元格格式为数字只是改变显示方式,实际存储的内容并没有变成纯文本字符串,所以pandas读取时会默认把长数字识别为浮点数,进而显示成科学计数法。可以通过以下两种方式解决:
- 读取时强制指定数据类型:直接在
pd.read_csv里用dtype参数把ID列设为字符串类型,避免被解析成浮点数:
如果不知道列名,也可以用列索引指定(比如ID是第0列):import pandas as pd df = pd.read_csv('your_data.csv', dtype={'ID': str})df = pd.read_csv('your_data.csv', converters={0: str}) - 从源头确保CSV里的数字是纯文本:在Excel中选中ID列,右键选择「设置单元格格式」→「文本」,重新输入或粘贴ID内容(避免只是改格式但实际数据还是数值型),再另存为CSV。这样CSV里的ID就是纯文本字符串,pandas读取后不会出现科学计数法。
日期显示为四位数字的解决办法
这个四位数字是Excel的日期序列号(以1899年12月30日为原点,每过一天加1),转CSV时如果Excel的日期列不是日期格式,就会直接存储这个序列号。解决方式如下:
- 读取时转换序列号为日期:如果CSV里的日期已经是序列号,用
pd.to_datetime指定原点和单位来转换:
或者直接在读取时解析:df = pd.read_csv('your_data.csv') df['date_column'] = pd.to_datetime(df['date_column'], unit='D', origin='1899-12-30')df = pd.read_csv('your_data.csv', parse_dates=['date_column'], date_parser=lambda x: pd.to_datetime(x, unit='D', origin='1899-12-30')) - 从源头保存正确的日期文本:在Excel中把日期列设置为明确的日期格式(比如「yyyy-mm-dd」),再另存为CSV,这样CSV里的日期就是标准的日期字符串,pandas读取时只需用
parse_dates参数指定列名即可自动识别:df = pd.read_csv('your_data.csv', parse_dates=['date_column'])
内容的提问来源于stack exchange,提问作者HR Michele
相关产品推荐
相关产品推荐

