Python Pandas:如何将pd.to_datetime转换后的Series转为DatetimeIndex以合并含日期的数据集?
解决方法:将Series转换为DatetimeIndex
我明白你的问题了——pd.to_datetime()处理Series后返回的还是Series对象,而pd.Index.union需要的是DatetimeIndex(Index的子类)才能正常合并。下面是具体的修复步骤和完整代码:
核心问题解析
当你用pd.to_datetime()处理一个Series时,它返回的是元素为datetime类型的Series,而非DatetimeIndex。functools.reduce结合pd.Index.union需要的是Index类的实例(比如DatetimeIndex),所以必须显式将Series转换为DatetimeIndex。
修复方案
推荐在datetime_convert函数内部完成转换,让代码更整洁:
完整修复代码
import functools import pandas as pd def datetime_convert(dataset): data = pd.read_csv(dataset[0], low_memory=False) # 反转表格并重置索引 data1 = data.iloc[::-1].reset_index(drop=True) # 提取指定日期列 date_series = data1[dataset[1]] # 先转datetime类型Series,再转为DatetimeIndex date_index = pd.DatetimeIndex(pd.to_datetime(date_series)) return date_index # 注意:修正文件名笔误,原代码中的'data2'应为'data2.csv' data1 = datetime_convert(['data1.csv', 'date']) data2 = datetime_convert(['data2.csv', 'Date']) # 合并两个DatetimeIndex data_combo = functools.reduce(pd.Index.union, [data1, data2]) print(data_combo)
备选方案:调用函数后转换
如果不想修改原函数,也可以在获取返回值后手动转换:
data1 = pd.DatetimeIndex(datetime_convert(['data1.csv', 'date'])) data2 = pd.DatetimeIndex(datetime_convert(['data2.csv', 'Date'])) data_combo = functools.reduce(pd.Index.union, [data1, data2])
预期输出
运行修复后的代码,你会得到符合预期的结果:
DatetimeIndex(['2015-10-08 13:40:00', '2015-10-08 13:41:00', '2015-10-08 13:42:00', '2021-10-21 00:01:00', '2021-10-21 00:02:00', '2021-10-21 00:03:00'], dtype='datetime64[ns]', freq=None)
内容的提问来源于stack exchange,提问作者georgehere
相关产品推荐
相关产品推荐

