使用 pandas 获取所有具有日期时间类型的列?

Get all columns with datetime type using pandas?

我有一个巨大的 DataFrame,其中的列从未按顺序排列,我也不知道它们的名称。

如何查找所有日期时间类型的列?

大部分解决方法都是网上的,发帖者知道专栏的名称所以我有点麻烦,因为我不知道。这种情况我该怎么办?

您可以使用 pandas.DataFrame.select_dtypes(),并且只包含 datetime64 类型。

df.select_dtypes(include=['datetime64'])

演示

>>> df
         dts1       dts2  ints
0  2012-01-01 2004-01-01     0
1  2012-01-02 2004-01-02     1
2  2012-01-03 2004-01-03     2
..        ...        ...   ...
97 2012-04-07 2004-04-07    97
98 2012-04-08 2004-04-08    98
99 2012-04-09 2004-04-09    99

>>> df.select_dtypes(include=['datetime64'])
         dts1       dts2
0  2012-01-01 2004-01-01
1  2012-01-02 2004-01-02
2  2012-01-03 2004-01-03
..        ...        ...
97 2012-04-07 2004-04-07
98 2012-04-08 2004-04-08
99 2012-04-09 2004-04-09

由于 pandas DataFrame 的每一列都是一个 pandas 系列,只需遍历列名列表并有条件地检查 series.dtype 日期时间(通常是 datetime64 [ns]):

for col in df.columns:
   if df[col].dtype == 'datetime64[ns]':
      print(col)

或作为列表理解:

[col for col in df.columns if df[col].dtype == 'datetime64[ns]']

或作为系列过滤器:

df.dtypes[df.dtypes=='datetime64[ns]']

对于包含带时区的日期时间的日期时间列(例如 datetime64[ns, UTC]),这是一个通用的解决方案:

def get_datetime_columns_of_data_frame(df):
    # dtypes as data frame
    df_type = df.dtypes.rename_axis('column')\
        .to_frame('dtype')\
        .reset_index(drop=False)
    # dtype as string for easier filtering
    df_type['dtype_str'] = df_type['dtype'].map(str)
    return df_type[df_type['dtype_str'].str.contains('datetime64')]['column'].tolist()