Python中unicode错误的操作数类型不受支持

时间:2017-01-03 15:31:35

标签: python pandas

我有一个以下格式的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'”

不确定这里有什么问题。任何帮助将不胜感激。

2 个答案:

答案 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