【问题标题】:Get all columns with datetime type using pandas?使用熊猫获取所有日期时间类型的列?
【发布时间】:2017-07-08 10:57:33
【问题描述】:

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

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

大多数在线解决方案,发布者知道列的名称,所以我遇到了一些麻烦,因为我不知道。在这种情况下我该怎么办?

【问题讨论】:

  • 列有什么else?其他类型? NaN?你能添加一些示例数据吗?
  • 我有超过 100 列,有些列只是整数,有些是布尔值,有些是字母数字。 datetime 列没有 NaN。 (只有2个,我只想得到他们中的任何一个)。让我们假设没有 NaN。我没有在超过 10 个数据集的样本中找到任何数据。
  • 如果使用数字列相关:stackoverflow.com/questions/25039626/…

标签: python pandas


【解决方案1】:

您可以使用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

【讨论】:

    【解决方案2】:

    由于 pandas DataFrame 的每一列都是 pandas Series,因此只需遍历列名列表并有条件地检查日期时间的 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]']
    

    【讨论】:

      【解决方案3】:

      对于包含带时区的日期时间的日期时间列(例如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()
      

      【讨论】:

      • data_frame_dtypes() 此答案中缺少函数定义。请分享您的答案的完整性。
      • @abhiieor 感谢您发现它!添加了缺失的定义。
      • @abhiieor 进一步简化为单个函数(这本来是我的目标,但意外地将函数调用留在了那里)。
      猜你喜欢
      • 2021-09-14
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 2015-08-24
      • 1970-01-01
      • 2012-11-05
      相关资源
      最近更新 更多