Pandas 不将数据框的某些列转换为日期时间索引

Pandas not converting certain columns of dataframe to datetimeindex

到目前为止我的数据框,

并且我正在尝试将 cols 转换为从 0 到 188 ( cols = list(hdata.columns[ range(0,188) ]) ) 的所有列的列表,格式为 [=17] =] 到日期时间索引。还有其他几列是 'string' 名称,因此无法转换为日期时间,所以我尝试这样做,

hdata[cols].columns = pd.to_datetime(hdata[cols].columns) #convert columns to **datetimeindex**

但这有效。 你能找出这里出了什么问题吗?

编辑: 处理此类数据的更好方法是使用 Split-Apply-Combine 方法。

第一步:拆分要执行某些特定操作的数据。

nonReqdf = hdata.iloc[:,188:].sort_index()
reqdf= reqdf.drop(['CountyName','Metro','RegionID','SizeRank'],axis=1)

第 2 步: 进行操作。在我的例子中,它将带有年份和月份的数据框列转换为 datetimeIndex。并每季度重新采样一次。

reqdf.columns = pd.to_datetime(reqdf.columns)
reqdf = reqdf.resample('Q',axis=1).mean()
reqdf = reqdf.rename(columns=lambda x: str(x.to_period('Q')).lower()).sort_index() # renaming so that string is yyyy**q**<1/2/3/4> like 2012q1 or 2012q2 likewise

第 3 步: 合并两个拆分的数据帧。(merge 可以使用,但可能取决于您想要什么)

reqdf = pd.concat([reqdf,nonReqdf],axis=1)

为了修改索引中的某些标签(无论是行还是列),您需要使用 df.rename,如

for i in range(188):
    df.rename({df.columns[i]: pd.to_datetime(df.columns[i])},
        axis=1, inplace=True)

或者您可以通过构建全尺寸索引覆盖所有列来避免循环

df.columns = (
    pd.to_datetime(cols) # pass the list with strings to get a partial DatetimeIndex
    .append(df.columns.difference(cols)) # complete the index with the rest of the columns
)