python - Pandas Python - 转换 HH :MM:SS into seconds in aggegate (csv file)

标签 python csv time pandas dataframe

我正在尝试转换“平均”中的数字。 Pandas read_csv 模块/函数中的“ session 持续时间”(HH:MM:SS) 列转换为整数(以秒为单位)。 例如,“0:03:26”表示转换后 206 秒。

输入示例:

Source       Month  Sessions    Bounce Rate     Avg. Session Duration   
ABC.com     201501   408        26.47%           0:03:26 
EFG.com     201412   398        31.45%           0:04:03

我写了一个函数:

def time_convert(x):
    times = x.split(':')
    return (60*int(times[0])+60*int(times[1]))+int(times[2])

只要将“0:03:26”传递给该函数,该函数就可以正常工作。但是当我试图通过将函数应用于 Pandas 中的另一列来创建新列“Duration”时,

df = pd.read_csv('myfile.csv')
df['Duration'] = df['Avg. Session Duration'].apply(time_convert)

返回错误信息:

> --------------------------------------------------------------------------- AttributeError                            Traceback (most recent call
> last) <ipython-input-53-01e79de1cb39> in <module>()
> ----> 1 df['Avg. Session Duration'] = df['Avg. Session Duration'].apply(lambda x: x.split(':'))
> 
> /Users/yumiyang/anaconda/lib/python2.7/site-packages/pandas/core/series.pyc
> in apply(self, func, convert_dtype, args, **kwds)    1991            
> values = lib.map_infer(values, lib.Timestamp)    1992 
> -> 1993         mapped = lib.map_infer(values, f, convert=convert_dtype)    1994         if len(mapped) and
> isinstance(mapped[0], Series):    1995             from
> pandas.core.frame import DataFrame
> 
> /Users/yumiyang/anaconda/lib/python2.7/site-packages/pandas/lib.so in
> pandas.lib.map_infer (pandas/lib.c:52281)()
> 
> <ipython-input-53-01e79de1cb39> in <lambda>(x)
> ----> 1 df['Avg. Session Duration'] = df['Avg. Session Duration'].apply(lambda x: x.split(':'))
> 
> AttributeError: 'float' object has no attribute 'split'

我不知道为什么它会显示“平均”的值。 session 持续时间是 float 的。

Data columns (total 7 columns):
Source                   250 non-null object
Time                     251 non-null object
Sessions                 188 non-null object
Users                    188 non-null object
Bounce Rate              188 non-null object
Avg. Session Duration    188 non-null object
% New Sessions           188 non-null object
dtypes: object(7)

谁能帮我找出问题所在?

最佳答案

df['平均。 Session Duration'] 应该是让您的函数正常工作的字符串。

df =pd.DataFrame({'time':['0:03:26']})

def time_convert(x):
    h,m,s = map(int,x.split(':'))
    return (h*60+m)*60+s

df.time.apply(time_convert)

这对我来说很好。

关于python - Pandas Python - 转换 HH :MM:SS into seconds in aggegate (csv file),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28845825/

相关文章:

c++ - 在Linux中查询RTC和NTP时间?

mysql - 将 Peewee ORM 与 MySQL 日期数学结合使用

python - C 编译器从各种 unix 风格的源代码构建 python

python - 如何计算客户状态变更次数

python - Pandas groupby 并在组的数量大于阈值时删除行

python - NumPy:新旧数据描述符的大小不匹配

Java - 如何使用 processbuilder 调用 python 类

linux - 无法在 Linux shell 脚本生成的 .csv 文件中存储为 CCyy-mm-dd 格式

javascript - Highcharts 重复显示相同的数据

在时间复杂度 O(n) 的无限线上找到一个点的算法