【问题标题】:How to get elapsed time on chunks csv python [duplicate]如何获取块csv python的经过时间[重复]
【发布时间】:2016-10-13 16:51:21
【问题描述】:

我正在读取一个 csv 文件。每行都有不同的值,但我只对第一个和第二个值感兴趣,它们的格式如下:

2015-11-02 10:07:33,2015-11-02 10:07:52

我需要获取两者之间的经过时间。我的代码是:

file = pd.read_csv('file.csv', header=None, skiprows=1, index_col=False,
               chunksize=1000000, usecols=[1, 2], names=['ts', 'te'], na_values=['n/a','N/A','nan','NaN'],
              dtype={'ts':datetime, 'te':datetime})

for chunk in file:
    chunk['duration'] = chunk['te']-chunk['ts']

但我收到以下错误:

TypeError: 不支持的操作数类型 -: 'str' 和 'str'

我能做什么?非常感谢。

更新: 我的问题解决了。但是现在我需要将每次经过的块转换为浮点数。谢谢。

【问题讨论】:

  • 长话短说:使用parse_dates=['ts', 'te']
  • 由于 Python 使用从 0 开始的索引,因此要读取第一列和第二列,请使用 usecols=[0, 1]
  • 请不要将问题编辑为新问题,尤其是。不要将已回答的问题扩展到新问题。
  • @IljaEverilä 好的,抱歉

标签: python csv datetime pandas


【解决方案1】:

使用pandas 模块解析日期和时间列:

from pprint import pprint
import pandas as pd

file = pd.read_csv('file.csv', header=None, skiprows=1, index_col=False,
                   chunksize=1000000,
                   na_values=['n/a','N/A','nan','NaN'],
                   usecols=[0, 1], names=['ts', 'te'],
                   parse_dates=['ts', 'te'])

for chunk in file:
    chunk['duration'] = (chunk['te'] - chunk['ts']) / pd.np.timedelta64(1, 's') # converts duration to seconds
    pprint(chunk)

示例

file.csv文件:

start-date,end-date,text
2015-11-02 10:07:33,2015-11-02 10:07:52,foo
2015-11-02 11:07:33,2015-11-02 11:08:52,bar

输出:

                   ts                  te  duration
0 2015-11-02 10:07:33 2015-11-02 10:07:52      19.0
1 2015-11-02 11:07:33 2015-11-02 11:08:52      79.0

【讨论】:

  • 首先感谢您的回答。这个对我有用。但是现在我有第二个问题,如何将经过的时间(它是 timedelta64[ns])转换为浮点数?谢谢。
猜你喜欢
  • 2019-01-26
  • 2021-06-02
  • 2015-11-05
  • 2018-03-31
  • 2023-04-05
  • 1970-01-01
  • 2015-08-12
  • 2016-05-31
  • 1970-01-01
相关资源
最近更新 更多