pandas按日期列resample求和提示非DatetimeIndex等索引类型报错如何解决
解决方案
报错原因说明
- 第一个
TypeError:调用resample时Date列仍为字符串格式,未转换为时间类型,pandas无法识别时间维度触发报错。 - 第二个
ValueError:你将Date列设为索引后,该列已从普通列中移除,仍在resample中传入on='Date'参数会导致找不到对应列,触发逻辑判断异常;另外你转换后的索引名称为TRANSACTIONDATE和原列名Date不匹配,也可能是原因之一。
正确实现方式
方式1:使用resample实现(支持自动补全无数据的日期行)
先正确转换Date列为时间类型,再执行重采样求和:
import pandas as pd # 转换Date列为带时区的datetime类型,适配原始数据的+05:30格式 df['Date'] = pd.to_datetime(df['Date']) # 写法1:不修改原索引,直接用on参数指定时间列 d = df.resample('D', on='Date')['Amount'].sum().reset_index() # 写法2:将Date设为索引后重采样 df = df.set_index('Date') d = df.resample('D')['Amount'].sum().reset_index()
方式2:使用groupby实现(仅返回有数据的日期,性能更高)
如果不需要补全无数据的日期,直接按日期分组求和更稳妥,不易触发异常:
import pandas as pd # 转换Date列后提取日期部分 df['Date'] = pd.to_datetime(df['Date']).dt.date # 按日期分组对Amount求和 d = df.groupby('Date')['Amount'].sum().reset_index()
内容的提问来源于stack exchange,提问作者Nithin Reddy
相关产品推荐
相关产品推荐

