Pandas 如何在值为日期时间字符串的情况下获取值计数的索引数据帧

Pandas 如何在值为日期时间字符串的情况下获取值计数的索引数据帧,pandas,Pandas,我在包含以下字段的csv文件中有数据: 用户id 创建日期 编辑日期 完成日期;及 撤销日期 User_id和date_created字段将永远不包含空值,但其他列将始终包含空值 例如: user_id, date_created, date_edited, date_finalised, date_withdrawn 1, 2013-01-31 00:17:01, null, 2013-02-02 14:11:17, null 2, 2013-01-31 01:00:15, 2013-01

我在包含以下字段的csv文件中有数据:

  • 用户id
  • 创建日期
  • 编辑日期
  • 完成日期;及
  • 撤销日期
User_id和date_created字段将永远不包含空值,但其他列将始终包含空值

例如:

user_id, date_created, date_edited, date_finalised, date_withdrawn
1, 2013-01-31 00:17:01, null, 2013-02-02 14:11:17, null
2, 2013-01-31 01:00:15, 2013-01-31 01:00:30, null, null
我想以一个数据框结束,该数据框包含特定日期周期内出现的每个日期时间列的记录计数,即每日、每小时和每分钟

使用上述示例和每日频率,我将看到:

date, date_created, date_edited, date_finalised, date_withdrawn
2013-01-31, 2, 1, 0, 0
2013-02-01, 0, 0, 0, 0
2013-02-02, 0, 0, 1, 0
使用导入文件后

data = pd.read_csv('filename.csv')

实现这一点需要哪些步骤?

首先,确保每个日期列都是datetime64列(有许多行您应该可以使用,但可能必须使用并强制=True):

现在,您可以使用例如“创建日期”列:

In [12]: pd.value_counts(pd.DatetimeIndex(df.date_created).normalize())
Out[12]: 
2013-01-31    2
dtype: int64
将这些系列放在一起:

In [13]: pd.concat((pd.value_counts(pd.DatetimeIndex(df[col]).normalize()) for col in df.columns if 'date' in col), axis=1).fillna(0)
Out[13]: 
            0  1  2  3
NaT         0  1  1  2
2013-01-31  2  1  0  0
2013-02-02  0  0  1  0
注意:如果不需要此行,可以
.drop(pd.NaT)

不幸的是,read_csv的
parse_dates=['date_created'、'date_edited'、'date_finalized'、'date_detached']
没有强制使用这些小示例(太多的空值),一种黑客方法是使用以下内容:

for col in df.columns:
    if 'date' in col:
        df[col] = pd.to_datetime(df[col], coerce=True)

谢谢那真是一种享受:-)。我也很感激你回答的清晰,它帮助我理解了每个阶段,而不仅仅是复制它。
for col in df.columns:
    if 'date' in col:
        df[col] = pd.to_datetime(df[col], coerce=True)