You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pd.to_numeric无法将object类型日期转换为integer类型如何解决

问题原因
  • 原始date列是字符串格式的日期(比如2020-03-14),不属于pd.to_numeric可识别的数字类字符串,直接调用该方法转换必然报错,该工具本身就不支持转换日期格式的字符串为数值。
  • 你现有代码中已经先用pd.to_datetime()把date列转换成了datetime64类型,之后又将该列设为了索引,后续执行df.apply(pd.to_numeric)只会处理所有数据值列,不会涉及到索引,所以你需要转换的日期字段根本没有被对应方法处理。
  • datetime类型的对象也无法直接用pd.to_numeric转换为整型,该方法不支持这个类型的入参。
解决方法

如果需要把日期转成整型(常用的有13位毫秒时间戳、距离某起始日期的天数两种形式),可以在日期转成datetime类型后直接做转换操作,不要等设为索引后再处理,修改后的代码如下:

import json
import pandas as pd
url='https://api.covid19india.org/states_daily.json'
import urllib.request
urllib.request.urlretrieve(url,'data.json') 
with open('data.json') as f:
    data=json.load(f)
data=data['states_daily']
df = pd.json_normalize(data)
# 先把object类型的日期转成datetime格式
df['date'] = pd.to_datetime(df['date']) 
# 选择以下任意一种方式把日期转成整型
# 方式1:转13位毫秒时间戳
df['date_int'] = df['date'].astype('int64') // 10**6
# 方式2:转距离数据集最早日期的间隔天数
# df['date_int'] = (df['date'] - df['date'].min()).dt.days
# 如果不需要保留原datetime格式的date列,可以直接替换:df['date'] = 转换后的整型值

# 原有业务逻辑保持不变
df.drop('tt', axis=1, inplace=True)
df.set_index('date', inplace=True)
df = df[df['status'] == 'Confirmed']
df.drop('status', axis=1, inplace=True)
df = df.apply(pd.to_numeric)
df = df.rolling(7).mean()
df.reset_index(inplace=True)

内容的提问来源于stack exchange,提问作者Akshat Tripathi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:15:05