使用 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()
我有一个巨大的 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()