Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从日期时间到可用值_Python_Date_Datetime_Dataset_Histogram - Fatal编程技术网

Python 从日期时间到可用值

Python 从日期时间到可用值,python,date,datetime,dataset,histogram,Python,Date,Datetime,Dataset,Histogram,我需要做一个一段时间内事件的柱状图。我的数据集以例如2013-09-03 17:34:04的格式为我提供了每个事件的时间,如何将其转换为我能够在Python中绘制的直方图? 我知道如何用datetime和time命令以另一种方式完成 顺便说一句,我的数据集包含1.500.000以上的数据点,因此请仅使用可通过循环或类似方式实现自动化的解决方案;) 使用time.strtime()将本地时间字符串转换为time.struct_time,然后使用time.mktime(),这将time.struct

我需要做一个一段时间内事件的柱状图。我的数据集以例如2013-09-03 17:34:04的格式为我提供了每个事件的时间,如何将其转换为我能够在Python中绘制的直方图? 我知道如何用datetime和time命令以另一种方式完成

顺便说一句,我的数据集包含1.500.000以上的数据点,因此请仅使用可通过循环或类似方式实现自动化的解决方案;)

使用
time.strtime()
将本地时间字符串转换为
time.struct_time
,然后使用
time.mktime()
,这将
time.struct_time
转换为UTC 1970-01-01 00:00以来的秒数

#! /usr/bin/env python

import time

def timestr_to_secs(timestr):
    fmt = '%Y-%m-%d %H:%M:%S'
    time_struct = time.strptime(timestr, fmt)
    secs = time.mktime(time_struct)
    return int(secs)

timestrs = [
    '2013-09-03 17:34:04',
    '2013-09-03 17:34:05',
    '2013-09-03 17:35:04',
    '1970-01-01 00:00:00'
]

for ts in timestrs:
    print ts,timestr_to_secs(ts)
我在时区+10,上面代码给我的输出是:

2013-09-0317:34:041378193644
2013-09-03 17:34:05 1378193645
2013-09-03 17:35:04 1378193704
1970-01-01 00:00:00 -36000
当然,为了制作柱状图,您可能希望从这些数字中减去一个方便的基准时间


这是一个更好的版本,灵感来自J.F.塞巴斯蒂安的评论

#/usr/bin/env python
导入时间
导入日历
def timestr_至_秒(timestr):
fmt=“%Y-%m-%d%H:%m:%S”
time_struct=time.strtime(timestr,fmt)
secs=calendar.timegm(时间结构)
返回秒
timestrs=[
'2013-09-03 17:34:04',
'2013-09-03 17:34:05',
'2013-09-03 17:35:04',
'1970-01-01 00:00:00'
]
对于时间trs中的ts:
打印ts,时间从秒到秒(ts)
输出

2013-09-0317:34:041378229644
2013-09-03 17:34:05 1378229645
2013-09-03 17:35:04 1378229704
1970-01-01 00:00:00 0

每当我想到使用localtime()可能出现的问题时,我就会想起多年前发生在我一位朋友身上的一个经典例子


一位经常参与FidoNet C_ECHO的程序员为一家啤酒厂编写了过程控制代码。不幸的是,他的代码使用了localtime()而不是gmtime(),当酿酒厂的计算机在夏时制结束时自动调整时钟时,会产生意想不到的后果。那天早上,当地时间凌晨2点发生了两次。因此,他的程序重复了它在凌晨2点第一次运行时已经执行的过程,即开始向一个相当大的大桶中填充啤酒成分。正如你所能想象的那样,酿酒厂的地板乱七八糟

要处理数百万点的时间序列,您可以尝试:


mktime()。当我写上述代码时,我在时间模块文档中找不到与之相反的
gmtime()
,但仔细阅读后,我发现日历模块中有一个隐藏在所有地方。这不是我的意思
timegm()
预计UTC时间。输入时间可能在本地时区。@J.F.Sebastian:当然。我假设Lauge数据集中的时间字符串具有恒定的时区偏移,最好是UTC时间。没错,我的转换例程可以包含一个时区偏移和一个DST标志,但我认为这没有意义,因为数据集不提供这些信息,Lauge不关心timestr_到_secs返回值的确切历元,他们只需要可以用来制作直方图的标量。但是,希望这些时间字符串是UTC时间,因为使用本地时间来处理这类事情会导致我们现在正在讨论的问题。@J.F.Sebastian:但是如果你有任何具体的建议(除了你在基于熊猫的答案中提出的建议),我非常高兴听到它们。
#!/usr/bin/env python
from io import StringIO
import matplotlib.pyplot as plt # $ pip install matplotlib
import pandas as pd 

csv_file = StringIO(u"""time,A,B
2013-09-03 17:34:04,1,2
2013-09-03 17:34:05,3,4
2013-09-03 17:34:10,4,5
""")
df = pd.read_csv(csv_file, parse_dates=True, index_col='time')
df = df.cumsum()
df.plot()
plt.show()