我有一个以下格式的pandas数据框:
Timestamp Clientip
2015-07-22T02:40:06.499174Z 106.51.235.133
2015-07-22T02:40:06.632589Z 115.250.16.146
为了对上述数据进行会话,我根据clientip对其进行了分组,然后创建了会话编号字段。
dfgrouped = testdf.groupby(['clientip'])
testdf['session_number'] = dfgrouped['timestamp'].apply(lambda s: (s - s.shift(1) > pd.Timedelta("15 min")).fillna(0).cumsum(skipna=False))
当我运行第二个命令时,我收到错误“不支持的操作数类型 - :'unicode'和'unicode'”
不确定这里有什么问题。任何帮助将不胜感激。
答案 0 :(得分:2)
试试这个:
In [162]: df
Out[162]:
Timestamp Clientip
0 2015-07-22T02:40:06.499174Z 106.51.235.133
1 2015-07-22T02:50:06.000000Z 106.51.235.133
2 2015-07-22T02:40:06.632589Z 115.250.16.146
3 2015-07-22T03:30:16.111111Z 115.250.16.146
In [163]: df.Timestamp = pd.to_datetime(df.Timestamp, errors='coerce')
In [164]: df
Out[164]:
Timestamp Clientip
0 2015-07-22 02:40:06.499174 106.51.235.133
1 2015-07-22 02:50:06.000000 106.51.235.133
2 2015-07-22 02:40:06.632589 115.250.16.146
3 2015-07-22 03:30:16.111111 115.250.16.146
In [165]: df.groupby('Clientip')['Timestamp'].apply(lambda s: (s - s.shift(1) > pd.Timedelta("15 min")).fillna(0).cumsum(skipna=False))
Out[165]:
0 0
1 0
2 0
3 1
Name: Timestamp, dtype: int32
答案 1 :(得分:0)
您的时间戳是ISO 8601格式化的字符串,精确度为微秒(应该使用datetime.isoformat生成)。它们也是unicode形式(Python 3调用那些字符串)但只包含ASCII。使用适当的格式字符串,您可以使用datetime.strptime对其进行解析。在Pandas中,适当的函数称为to_datetime。