Pandas 如何在值为日期时间字符串的情况下获取值计数的索引数据帧
我在包含以下字段的csv文件中有数据: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
- 用户id
- 创建日期
- 编辑日期
- 完成日期;及
- 撤销日期
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)