我尝试根据pandas dataframe中的列是否为date类型来过滤它们。我可以找出哪些是date类型,但之后必须解析输出或手动选择列。我想自动选择date列。以下是我目前为止的示例-在这种情况下,我只想选择'date_col'列。
import pandas as pd
df = pd.DataFrame([['Feb-2017', 1, 2],
['Mar-2017', 1, 2],
['Apr-2017', 1, 2],
['May-2017', 1, 2]],
columns=['date_str', 'col1', 'col2'])
df['date_col'] = pd.to_datetime(df['date_str'])
df.dtypes
输出:
date_str object
col1 int64
col2 int64
date_col datetime64[ns]
dtype: object
6条答案
按热度按时间raogr8fs1#
我刚刚遇到这个问题,发现@charlie-haley的答案对我的用例来说不够通用,特别是
np.datetime64
似乎与datetime64[ns, UTC]
不匹配。你也可以扩展dtypes的列表来包含其他类型,但是这似乎不是一个很好的解决方案,所以我最终使用了pandas API中的
is_datetime64_any_dtype
函数。在:
输出:
qv7cva1a2#
Pandas有一个很酷的函数
select_dtypes
,它可以接受exclude或include(或两者)作为参数。它根据dtypes过滤 Dataframe 。所以在这种情况下,你会希望包含dtypenp.datetime64
的列。要按整数过滤,你可以使用[np.int64, np.int32, np.int16, np.int]
,用于float:[np.float32, np.float64, np.float16, np.float]
,仅按数值列筛选:[np.number]
。输出:
在:
输出:
holgip5t3#
Numpy的替代品有点丑:
dbf7pr2w4#
此代码自动识别日期列并将数据类型从object更改为'datetime64[ns]'。一旦您获得日期数据类型,您就可以轻松执行其他操作。
pb3skfrl5#
最近我需要检查列中是否有任何元素是日期或数字
我的方法是,尝试转换为类型(datetime或numeric),然后检查是否有任何元素为null
输出:
然后使用
isnull()
检查元素是否可以转换这将返回True,因为至少有一个元素为null/NaT
检查数字的步骤
如果列上的所有元素都是数字,则返回True
两者都将返回一个numpy.bool_,但如果需要,可以很容易地将其转换为bool
输出:
--
输出:
gmol16396#
这应该适用于有时区信息的日期时间。这里我转换一个日期时间对象(最初存储为对象),首先转换为日期时间,然后我将其本地化。
我的初始日期时间值如下所示
2021-06-15 23:35:00+05:30