如何将含多个Timestamp数组的列表转为DataFrame索引?
解决方法
你的问题出在pd.concat只能处理Series或DataFrame对象,不能直接拼接numpy数组,所以得先把数组转成允许的格式,或者先合并所有数组,再创建DataFrame索引。下面给两种可行的方案:
方案一:合并所有数组为一维数组
先把列表里的多个numpy数组合并成一个一维数组,再用这个数组作为DataFrame的索引:
import pandas as pd import numpy as np # 你的日期列表 dates = [np.array([pd.Timestamp('2022-09-26 00:00:00', freq='15T'), pd.Timestamp('2022-09-26 00:15:00', freq='15T'), pd.Timestamp('2022-09-26 00:30:00', freq='15T')], dtype=object), np.array([pd.Timestamp('2022-09-27 00:00:00', freq='15T'), pd.Timestamp('2022-09-27 00:15:00', freq='15T')], dtype=object)] # 合并数组为一维数组 combined_dates = np.concatenate(dates) # 创建DataFrame(这里用随机数据示例,替换成你的真实数据即可) df = pd.DataFrame({'values': np.random.rand(len(combined_dates))}, index=combined_dates)
方案二:转成Series后拼接
把每个numpy数组转换成Pandas Series,再用pd.concat拼接,最后作为索引:
import pandas as pd import numpy as np # 你的日期列表 dates = [np.array([pd.Timestamp('2022-09-26 00:00:00', freq='15T'), pd.Timestamp('2022-09-26 00:15:00', freq='15T'), pd.Timestamp('2022-09-26 00:30:00', freq='15T')], dtype=object), np.array([pd.Timestamp('2022-09-27 00:00:00', freq='15T'), pd.Timestamp('2022-09-27 00:15:00', freq='15T')], dtype=object)] # 将每个数组转为Series date_series_list = [pd.Series(arr) for arr in dates] # 拼接Series combined_dates = pd.concat(date_series_list, ignore_index=False) # 创建DataFrame df = pd.DataFrame({'values': np.random.rand(len(combined_dates))}, index=combined_dates)
如果不需要Timestamp里的freq属性,可以在合并后转成普通datetime类型:
combined_dates = np.concatenate(dates).astype('datetime64[ns]')
内容的提问来源于stack exchange,提问作者OAP
相关产品推荐
相关产品推荐

