微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 按日期索引的Pandas数据帧

所以Python,使用pandas模块似乎是matlab和R的一个很好的选择.这就是我最近切换到这个的原因.那里有资源,我搜索了论坛但找不到类似的东西.如果您有一些教程或其他有用材料的链接,请发布它们.

Wes McKinney有一个关于大熊猫的精彩教程.
http://www.youtube.com/watch?v=w26x-z-BdWQ&list=FLJ5xKwlfj7wg8S_A5SgR6Wg&feature=mh_lolz

在1:10他展示了如何按日期而不是整数索引数据框中的行的示例.
我想做类似的事情.

不同之处在于我有3个变量,Y1,Y2,Y3,每个变量都有一列时间戳,X1,X2,X3.

TestFile.txt:  
X1  Y1  X2  Y2  X3  Y3
27/11/2012  11.436  29/11/2012  20.631  4/12/2012   10.209  
28/11/2012  11.468  30/11/2012  20.185  5/12/2012   9.973  
29/11/2012  11.414  3/12/2012   19.962  6/12/2012   9.736  
30/11/2012  11.355  4/12/2012   19.562  7/12/2012   9.509  
3/12/2012   11.309  5/12/2012   18.908  10/12/2012  9.259  
4/12/2012   11.118  6/12/2012   18.288  11/12/2012  8.109  
5/12/2012   10.873  7/12/2012   17.973  
6/12/2012   10.582  10/12/2012  17.788  
7/12/2012   10.264  11/12/2012  17.554  
10/12/2012  9.886  
11/12/2012  9.164  

我想做4件事:

>将Yi中的数据与Xi中的日期相关联,i = 1,2,3
>按日期索引行
>删除早于4月12日的所有数据,这是Y3的第一个日期
>只能按日期和列访问所有日期

这是一个测试文件,描述了如何读取数据以及如何打印数据.
您可以看到X1已正确解析为pandas日期格式,但不是X2或X3.这是我通过指定尝试做的事情
index_col = [0,2,4]

parse_dates = True

TestFile.py:
import pandas as pd

df = pd.read_csv('TestFile.txt',sep='\t', index_col=[0,2,4], parse_dates = True)

print 'pandas version: ', pd.__version__
print df

给出输出

pandas version:  0.10.0b1
X1         X2         X3              Y1      Y2      Y3                   
2012-11-27 29/11/2012 4/12/2012   11.436  20.631  10.209
2012-11-28 30/11/2012 5/12/2012   11.468  20.185   9.973
2012-11-29 3/12/2012  6/12/2012   11.414  19.962   9.736
2012-11-30 4/12/2012  7/12/2012   11.355  19.562   9.509
2012-03-12 5/12/2012  10/12/2012  11.309  18.908   9.259
2012-04-12 6/12/2012  11/12/2012  11.118  18.288   8.109
2012-05-12 7/12/2012  None        10.873  17.973     NaN
2012-06-12 10/12/2012 None        10.582  17.788     NaN
2012-07-12 11/12/2012 None        10.264  17.554     NaN
2012-10-12 None       None         9.886     NaN     NaN
2012-11-12 None       None         9.164     NaN     NaN

通缉输出

                Y1      Y2       Y3                 
2012-04-12  11.118  19.562   10.209
2012-05-12  10.873  18.908    9.973
2012-06-12  10.582  18.288    9.736
2012-07-12  10.264  17.973    9.509
2012-10-12   9.886  17.788    9.259
2012-11-12   9.164  17.554    8.109

如果您对如何做到这一点有任何想法,非常感谢您的帮助:)

解决方法:

我认为你的困惑是由于对index_col参数的误解.当您将列列表传递给index_col时,pandas正在尝试创建一个多索引,即一个具有多个列作为索引的数据帧,就像一个多维表.它不是试图通过连接多个列来创建单个索引.

一种可行的策略是使用输入文件中适当的列对创建三个数据帧,然后将它们连接起来.

X1 Y1 X2 Y2 X3 Y3 – > (X1,Y1)的数据帧(X2,Y2)的数据帧(X3,Y3)的数据帧

如果您使用的是Pandas的最新开发版本,或者愿意,可以通过在read_csv()中使用新的parse_cols参数来简化这一过程.或者,您可以读入所有数据,提取所需的三个数据帧,然后将它们连接起来.

最后,您可以使用参数前后的df.truncate来获取所需的Daterange.更简单地说,您可以使用dropna()来省略缺少值的日期.

希望这可以帮助.请告诉我们您正在使用的熊猫版本.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐