如何将pd.read_excel读取的二维表转为带datetime索引的pandas DataFrame
把Excel读取的二维表转成Datetime索引的Pandas DataFrame
嘿,这事儿不难,我分两种常见情况给你讲清楚,你对着自己的Excel表选对应的方法就行:
情况1:Excel里已经有完整的日期列(比如"1948-01-01"格式)
如果你的表本身就有一列是日期格式(不管是Excel自带的日期类型,还是字符串格式的日期),那读取的时候直接一步到位最省事:
# 读取时直接指定解析日期列,并把它设为索引 df = pd.read_excel('你的文件路径.xlsx', parse_dates=['日期列的名称'], index_col='日期列的名称')
要是你已经先把表读进data_xlsx了,也可以事后调整:
# 先把日期列转成datetime类型 data_xlsx['日期列的名称'] = pd.to_datetime(data_xlsx['日期列的名称']) # 再把它设为索引 data_xlsx.set_index('日期列的名称', inplace=True)
情况2:日期是分成「年份」「月份」两列存储的
很多老表格会把年、月分开成两列(比如一列是1948,一列是1),这时候需要先把它们组合成完整的日期:
# 先读取原始数据 data_xlsx = pd.read_excel('你的文件路径.xlsx') # 组合年、月,默认把日期设为每月1号(符合你给出的示例格式) data_xlsx['日期'] = pd.to_datetime(data_xlsx[['年份列名', '月份列名']].assign(日=1)) # 设置索引 data_xlsx.set_index('日期', inplace=True) # 要是你只需要数值列(比如示例里的3.4、3.8这些),可以单独提取出来 final_df = data_xlsx[['数值列的名称']]
小提示:处理奇怪的日期格式
如果你的日期列是特殊格式(比如"1948年1月"、"Jan-1948"),可以用pd.to_datetime的format参数指定解析规则,避免出错:
# 比如解析"1948年1月"这种格式 data_xlsx['日期'] = pd.to_datetime(data_xlsx['日期列'], format='%Y年%m月')
最后你可以用df.index.dtype检查一下索引是不是datetime64[ns]类型,或者用df.head()看看输出是不是你想要的样子~
内容的提问来源于stack exchange,提问作者user9505772
相关产品推荐
相关产品推荐

