使用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
相关产品推荐
相关产品推荐

