分析pandas中的datestring

2024-03-29 09:38:44 发布

您现在位置:Python中文网/ 问答频道 /正文

对于提出一个已经不止一次得到全面解决的问题,我深表歉意。我的问题是,我试图复制粘贴,因为是这样的帖子,但没有为我工作的例子。我有“dd mm YYYY HH mm ss value value”格式的数据。我想把它读成pandas数据框,第一列是datestring。以下是我在SO posts上尝试的例子: 一。第一个样本数据

01 05 2013 00 00 00     26.4    16.5
02 05 2013 00 00 00     25.9    17.7
03 05 2013 00 00 00     26.6    17.4
......

HH-mm-ss的零被加上只是为了与示例完全一致。

  1. 其次是进口的包装

    从datetime导入datetime 导入熊猫作为pd 导入操作系统 从cStringIO导入StringIO

    fname=os.path.expanduser('./temps0.txt')

  2. 我试过的三个例子

    (一) 发帖人:

    Parse dates when year month day and hour are in separate columns using pandas in python

    def dt_parse(日期字符串): dt=pd.datetime.strptime(日期字符串,'%d%m%Y') 返回日期 df=pd.read_csv(fname,header=None,index_col='datetime', parse_dates={'datetime':[0,1,2,4,5,6]}, 日期分析器=lambda x:pd.datetime.strptime(x,'%d%m%Y')) 日期分析器=dt_pasre)

这是错误的一部分

File "/home/zmumba/anaconda/lib/python2.7/site-packages/pandas/io/parsers.py",
 line 1763, in _try_convert_dates
    colnames.append(str(columns[c]))
IndexError: list index out of range

(二) 又一次尝试,来自SO post:

https://stackoverflow.com/questions/11615504/parse-dates-when-yyyymmdd-and-hh-are-in-separate-columns-using-pandas-in-python

parse = lambda x: datetime.strptime(x, '%d%m%Y')
pd.read_table("./temps0.txt",  parse_dates = [['DD MM YYYY HH mm ss']],
                               index_col = 0,
                               date_parser=parse)

这是错误的一部分

File "/home/zmumba/anaconda/lib/python2.7/site-packages/pandas/io/parsers.py",
 line 1009, in _set
    self._reader.set_noconvert(names.index(x))
ValueError: 'DD MM YYYY HH mm ss' is not in list

(三) 又一次尝试,来自SO post:

https://stackoverflow.com/questions/17301589/parsing-dd-mm-yy-hh-mm-ss-columns-from-txt-file-using-pythons-pandas?lq=1
def date_parser(ss):
    day, month, year, hour, min, sec = ss.split()
    return pd.Timestamp('20%s-%s-%s %s:%s:%s' % (year, month, day, hour, min, sec))
df = pd.read_csv('temps0.txt', header=None, sep='\s+\s', parse_dates=[[0]], date_parser=date_parser)

这是错误的一部分

File "<stdin>", line 2, in date_parser
ValueError: too many values to unpack

请原谅我的无知,因为我试图学习主要是通过这样的职位(官方文件完全缺乏明确的例子)。


Tags: columnsintxtparserpandasdatetimedateindex
1条回答
网友
1楼 · 发布于 2024-03-29 09:38:44

Chang's answer中,他使用了一个解析器,这是您需要调整以匹配日期字符串的日期格式的位:

import datetime
parse = lambda x: datetime.strptime(x, '%d %m %Y %H %M %S')

您还需要调整列名,在该示例中,列名与格式类似,这有点混乱。这里没有列名,因此可以使用数字(表示列的位置,并告诉read_csv使用header=None):

from StringIO import StringIO
csv = '''01 05 2013 00 00 00,26.4,16.5
02 05 2013 00 00 00,25.9,17.7
03 05 2013 00 00 00,26.6,17.4'''

注意:我们使用header=None,因为没有列名。

df = pd.read_csv(StringIO(csv), parse_dates=[0],
                                index_col=0,
                                date_parser=parse,
                                header=None)
In [11]: df
Out[11]:
               1     2
0                     
2013-05-01  26.4  16.5
2013-05-02  25.9  17.7
2013-05-03  26.6  17.4

如果数据由多个空格(多于两个)而不是逗号分隔,则使用sep参数:

csv = '''01 05 2013 00 00 00     26.4    16.5
02 05 2013 00 00 00     25.9    17.7
03 05 2013 00 00 00     26.6    17.4'''

In [21]: pd.read_csv(StringIO(csv), parse_dates = [0],
                           index_col = 0,
                           date_parser=parse,
                           header=None, sep='\s\s+')
Out[21]: 
               1     2
0                     
2013-05-01  26.4  16.5
2013-05-02  25.9  17.7
2013-05-03  26.6  17.4

注意:io docs涉及很多细节,有很多例子。

相关问题 更多 >