python - Pandas 日期时间索引

标签 python datetime pandas

我的数据框需要一个 DateTimeIndex。问题是我的源文件。日期 header 是 Date(dd-mm-yy),但实际日期数据的格式为 dd:mm:yy (24:06:1970) 等。我有很多源文件,因此手动更改 header 会很乏味并且不是良好的编程实践。如何从 python 内部解决这个问题?

也许创建源文件的副本,打开它,搜索日期标题,更改它,然后关闭它?我是 python 新手,所以我不确定这是否是最好的做事方式,如果是,我该如何实现这样的代码?

目前我有这个;

df = pd.read_csv('test.csv',
                    skiprows = 4,
                    parse_dates = {'stamp':[0,1]},
                    na_values = 'NaN',                    
                    index_col = 'stamp'
                 )

其中第 0 列是相关日期列,第 1 列是时间列。 我没有收到任何错误消息,只有错误的数据。

抱歉,我应该添加相关 csv 文件的片段。我现在已在下面提供它;

some stuff I dont want 
some stuff I dont want 
some stuff I dont want 
some stuff I dont want 
Date(dd-mm-yy),Time(hh:mm:ss),Julian_Day
01:07:2013,05:40:41,182.236586,659,1638.400000
01:07:2013,05:44:03,182.238924,659,1638.400000
01:07:2013,05:47:48,182.241528,659,1638.400000
01:07:2013,05:52:21,182.244687,659,1638.400000

最佳答案

我认为主要问题是标题行 Date(dd-mm-yy), Time(hh:mm:ss), Julian_Day似乎只指定了一些列名称。 Pandas无法推断如何处理其他数据。

尝试跳过文件的列名称行并传递 pandasnames 的列表并定义您自己的date_parser :

def my_parser(date, time):
    import datetime
    DATE_FORMAT = '%d:%m:%Y'
    TIME_FORMAT = '%H:%M:%S'
    date = datetime.datetime.strptime(date, DATE_FORMAT)
    time_weird_date = datetime.datetime.strptime(time, TIME_FORMAT)
    return datetime.datetime.combine(date, time_weird_date.time())

import pandas as pd
from cStringIO import StringIO

data = """\
some stuff I dont want 
some stuff I dont want 
some stuff I dont want 
some stuff I dont want 
Date(dd-mm-yy),Time(hh:mm:ss),Julian_Day
01:07:2013,05:40:41,182.236586,659,1638.400000
01:07:2013,05:44:03,182.238924,659,1638.400000
01:07:2013,05:47:48,182.241528,659,1638.400000
01:07:2013,05:52:21,182.244687,659,1638.400000
"""  

pd.read_csv(StringIO(data), skiprows=5, index_col=0, 
            parse_dates={'datetime':['date', 'time']}, 
            names=['date','time', 'Julian_Day', 'col_2', 'col_3'],
            date_parser=my_parser)

这应该会给你你想要的。

正如你所说,你是 python 新手,我应该补充一点,来自 cStringIO import StringIO , data = """... ,和StringIO(data)部分只是为了让我可以将数据以可运行的形式直接包含在这个答案中。您只需要pd.read_csv(my_data_filename, ...在你自己的代码中

关于python - Pandas 日期时间索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24484774/

相关文章:

python - 改进 python 中的堆栈跟踪钩子(Hook)

python - Django Autocomplete Light 创建新选择

python - 类中所有函数的函数字典

python - 转移多个日期列的优雅方式 - Pandas

python - 复制列并将结果与​​另一个数据框连接

python - 转置 Pandas 聚合函数中的列

使用子进程的python脚本,将所有输出重定向到文件

python - 将 Pandas 列转换为日期时间

python 3.5 matplotlib从csv读取日期但不能表示为X轴上的日期

SQL 基于时间的触发器