- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有几个格式如下的 CSV 文件:
Year,Day,Hour,Min,Sec.,P1'S1
2003, 1, 0, 0,12.22, 0.541
2003, 1, 1, 0,20.69, 0.708
2003, 1, 2, 0, 4.95, 0.520
2003, 1, 3, 0,13.42, 0.539
...
(其中 day 是一年中的第几天),我正在尝试使用 pandas 库(似乎是到目前为止很棒的库)。
有一个内置函数可以在 pandas 中读取 CSV,更好的是,该函数可以检查日期类型的列。并自动将其用作索引(这非常适合我正在做的事情)。
问题是,我无法使用这种格式的日期数据。
我试过:
data = pd.read_csv("csvFile.csv", index_col=[0, 1], , index_col=[0, 1, 2, 3, 4] parse_dates=True)
但它只能正确获取年份:
In [36]: data.index
Out[36]:
MultiIndex
[(<Timestamp: 2003-09-04 00:00:00>, 1, 0, 0, 12.22)
(<Timestamp: 2003-09-04 00:00:00>, 1, 1, 0, 20.69)
(<Timestamp: 2003-09-04 00:00:00>, 1, 2, 0, 4.95) ...,
(<Timestamp: 2003-09-04 00:00:00>, 365, 21, 0, 3.77)
(<Timestamp: 2003-09-04 00:00:00>, 365, 22, 0, 14.6)
(<Timestamp: 2003-09-04 00:00:00>, 365, 23, 0, 13.36)]
从文档中,我看到您可以在 pandas 的 read_csv 函数中指定“date_parser”属性。但是文档没有显示如何,我也无法弄清楚。任何对该主题有经验的人都可以提供帮助。
干杯,布鲁诺
最佳答案
为了解析一个多列日期,你需要告诉 pandas 应该将哪些列组合成一个日期,所以你需要说 parse_dates=['Year','Day','Hour' ,'分钟','秒']
您还需要定义自己的解析器,它从您在 parse_dates
中指定的每一列中获取一个元素:
In [1]: import pandas as pd
In [2]: from datetime import datetime, timedelta
In [3]: from cStringIO import StringIO
In [4]: data = """\
Year,Day,Hour,Min,Sec.,P1'S1
2003, 1, 0, 0,12.22, 0.541
2003, 1, 1, 0,20.69, 0.708
2003, 1, 2, 0, 4.95, 0.520
2003, 1, 3, 0,13.42, 0.539
"""
In [5]: def parse(yr, doy, hr, min, sec):
yr, doy, hr, min = [int(x) for x in [yr, doy, hr, min]]
sec = float(sec)
mu_sec = int((sec - int(sec)) * 1e6)
sec = int(sec)
dt = datetime(yr - 1, 12, 31)
delta = timedelta(days=doy, hours=hr, minutes=min, seconds=sec,
microseconds=mu_sec)
return dt + delta
...:
In [6]: pd.read_csv(StringIO(data), parse_dates={'datetime':
['Year','Day','Hour','Min','Sec.']},
date_parser=parse, index_col='datetime')
Out[6]:
P1'S1
datetime
2003-01-01 00:00:12.220000 0.541
2003-01-01 01:00:20.690000 0.708
2003-01-01 02:00:04.950000 0.520
2003-01-01 03:00:13.419999 0.539
关于python - 使用 python pandas 解析格式为 Year, Day, Hour, Min, Sec 的 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12269528/
我需要本地化所有可能性: 1年, 2 年,然后……(不超过任何数字)。 1个月, 2 个月,然后……(不超过任何数字)。 在各种语言中,“年”这个词会根据它前面的数字而变化。比如法语: 22 年 =
本文整理了Java中org.joda.time.Years.years()方法的一些代码示例,展示了Years.years()的具体用法。这些代码示例主要来源于Github/Stackoverflow
年.hs: year = year + 1 main = print year 这不是尾递归调用: year = year + 1 year = (year + 1) + 1 year = ((yea
我有一个表,其中包含来自流量计的数据,排列如下: Water.Year May Jun Jul Aug Sep Oct Nov Dec Jan Feb
本文整理了Java中com.meidusa.amoeba.sqljep.function.Year.year()方法的一些代码示例,展示了Year.year()的具体用法。这些代码示例主要来源于Git
我是 Java 新手,希望获得一些有关正在尝试解决的问题的建议。我必须编写一个方法来生成唯一的编号。 因此,以字符串表示的唯一数字将有 10 个字符。 #1. First 2 will represe
谁有权威的答案,哪个性能更好? GROUP BY YEAR(FROM_UNIXTIME(col)) /* or */ GROUP BY EXTRACT(YEAR FROM FROM_U
我从今年过去了 20 年。但目前我希望它显示为年复一年。例如:1992 - 1999 1999 - 2002 2003 - 2015 这是我的代码。 function populatedropdown
我目前能够将 Landsat 图像拆分为 LC80440142014093LGN00.tar.gz 的日期信息, 我把它分成 2014093 .现在我需要将其更改为 Excel 或 Open Offi
我有一些数据想总结一下。我想对所有列进行总结,固定 YEAR 列。即对于一个变量我可以做: df %>% group_by(LG1, YEAR) %>% summarise(Freq = n(
我有一个独特的问题,我根本无法解决。 所以我在 SQL Server 2005 中,我得到了以下要处理的数据: FISCAL_YEAR_START_MONTH INT(财政年度的第一个月) COUNT
我有一些数据想总结一下。我想对所有列进行总结,固定 YEAR 列。即对于一个变量我可以做: df %>% group_by(LG1, YEAR) %>% summarise(Freq = n(
我想从指定年份的表中获取所有数据。但问题是我将日期设置为 DATETIME 类型。 我正在尝试类似的东西: SELECT * FROM table WHERE entrytim
使用日期选择器,年份下拉菜单默认只显示 10 年。用户必须单击最后一年才能添加更多年份。 我们如何将初始范围设置为 100 年,以便用户默认看到一个大列表? function InitDate
我必须将我的数据帧从当前格式转换为新格式(请参阅下面的图像或结构)。我不知道如何才能做到这一点。我想要每个 ID 一年,从 2013 年到 2018 年(所以每个 ID 有 6 行,每年一个)。日期是
在学习了 Hadley 的书并在 SO 上搜索之后,我创建了一个由年和月矩阵组成的热图,颜色根据时间序列变量的百分比变化而变化。热图和我用来获取它的代码如下所示。我还有一些我自己无法解决的问题。 1)
在电子表格上,我有各种谷歌分析 channel (有机、直接、移动、桌面等)的月度报告表。对于每个 channel ,我都有另一列自动计算 Y-o-Y EX 的增长百分比:(A12-A1)/A1。然后
我有几个气象变量的时间序列数据集。时间数据记录在三个单独的列中: 年份(例如 2012) 一年中的第几天(例如 261 代表闰年的 9 月 17 日) 时:分(例如 1610) 有没有一种方法可以合并
YEAR(x) 和 EXTRACT(YEAR FROM x) 在 MySQL 中是否等价? 似乎在我所有的实验中都有,但我不确定是否没有任何边缘情况。 举个例子:这两个查询返回完全相同的结果。但我不确
我读到“将日期字符串转换为mysql日期时间字段”:但这对我没有帮助 所以我想做的是将dat文件读入mysql中的空表。 table CLIMBED(TRIP_ID int,PEAK VARCHAR(
我是一名优秀的程序员,十分优秀!