gpt4 book ai didi

python - 在 Pandas 中解析日期字符串

转载 作者:太空宇宙 更新时间:2023-11-04 09:05:10 25 4
gpt4 key购买 nike

对于提出一个已经不止一次得到全面解决的问题,我深表歉意。我的问题是我曾尝试按原样复制粘贴 SO 帖子中的示例,但对我没有用。我的数据格式为“dd mm YYYY HH mm ss value value”。我想将其作为第一列作为日期字符串的 pandas 数据框来阅读。以下是我从 SO 帖子中尝试的示例:1. 第一个样本数据

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. 其次是导入的包

    从日期时间导入日期时间将 Pandas 导入为 pd导入操作系统从 cStringIO 导入 StringIO

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

  2. 下面是我试过的三个例子

    一个)来自 SO 帖子:

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

    def dt_parse(日期字符串): dt = pd.datetime.strptime(date_string, '%d %m %Y') 返回日期df = pd.read_csv(fname, header=None, index_col='datetime', parse_dates={'datetime': [0,1,2,4,5,6]}, date_parser=lambda x: pd.datetime.strptime(x, '%d %m %Y')) date_parser=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

b)另一个尝试,来自 SO 帖子:

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

c)另一个尝试,来自 SO 帖子:

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

请原谅我的无知,因为我主要尝试通过 SO 帖子学习(为了清楚起见,官方文档完全没有示例)。

最佳答案

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进入很多细节,有很多例子。

关于python - 在 Pandas 中解析日期字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21414885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com