如何在Python Pandas中将CSV中的字符串日期读取为日期类型?
解决Pandas读取CSV日期字段(31DEC2017格式)的问题
嘿,我明白你遇到的麻烦了——用dtype参数直接指定日期类型确实行不通,这是因为dtype是用来定义基础数据类型(比如字符串、整数)的,没办法直接解析自定义格式的日期字符串。咱们换两种靠谱的方法来搞定这个问题:
方法1:读取时直接解析日期
用parse_dates参数指定要解析的列,再配合date_parser自定义解析格式,这样Pandas就能正确识别31DEC2017这种格式了:
from datetime import datetime import pandas as pd # 自定义日期解析函数 def parse_period(date_str): # %d=两位日期,%b=三位字母月份缩写,%Y=四位年份 return datetime.strptime(date_str, '%d%b%Y') # 读取CSV时直接解析PERIOD列 df = pd.read_csv("test.csv", parse_dates=['PERIOD'], date_parser=parse_period)
方法2:先读为字符串,再转换为日期
如果觉得自定义函数麻烦,也可以先把PERIOD列读成字符串,之后用pd.to_datetime转换,这种方式更灵活,还能处理解析错误:
import pandas as pd # 先读取CSV,PERIOD默认是字符串类型 df = pd.read_csv("test.csv") # 转换为日期类型,指定格式 df['PERIOD'] = pd.to_datetime(df['PERIOD'], format='%d%b%Y') # 可选:如果有无效日期,用errors参数处理(比如转成NaT) # df['PERIOD'] = pd.to_datetime(df['PERIOD'], format='%d%b%Y', errors='coerce')
为什么之前的方法失效?
你之前尝试的dtype={'PERIOD': time}、dtype={'PERIOD': datetime}都不行,是因为dtype参数只接受像str、int、float这类基础数据类型的对象,而datetime/time是Python的日期类,Pandas无法通过dtype直接将字符串映射为这类日期对象,必须用专门的日期解析工具来处理。
内容的提问来源于stack exchange,提问作者Victor
相关产品推荐
相关产品推荐

