Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据时间转换&;过滤问题_Python_Pandas - Fatal编程技术网

Python 数据时间转换&;过滤问题

Python 数据时间转换&;过滤问题,python,pandas,Python,Pandas,我正在使用Pandas 0.8.1获取雅虎股票价格 from datetime import datetime from pandas.io.data import DataReader stk_price = DataReader('600809.ss', 'yahoo', datetime(2006,1,1), datetime(2012,12,31)).reset_index() >>> stk_price.Date 0 2010-01-04 00:00:00

我正在使用Pandas 0.8.1获取雅虎股票价格

from datetime import datetime
from pandas.io.data import DataReader

stk_price = DataReader('600809.ss', 'yahoo', datetime(2006,1,1), datetime(2012,12,31)).reset_index()

>>> stk_price.Date
0    2010-01-04 00:00:00
1    2010-01-05 00:00:00
2    2010-01-06 00:00:00
3    2010-01-07 00:00:00
4    2010-01-08 00:00:00
我想通过以下方式将日期转换为字符串:

>>>stk_price.Date.astype('|S10')
0     1970-01-15
1     1970-01-15
2     1970-01-15
3     1970-01-15
4     1970-01-15
5     1970-01-15
为什么显示“1970-01-15”而不是“2010-01-04”等?如何修复它

如果我有

DATE_LIST = [
 u'20090331', u'20090630', u'20090930', u'20091231', \
 u'20100331', u'20100630', u'20100930', u'20101231', \
 u'20110331', u'20110630', u'20110930', u'20111231', \
 u'20120331', u'20120630', u'20120930', u'20121231'
 ]
我只是尝试通过以下方式过滤日期列在
Date\u列表中的
stk\u price
行:

from datetime import datetime
from pandas.io.data import DataReader
import numpy as np

DATE_LIST = [
 u'20090331', u'20090630', u'20090930', u'20091231', \
 u'20100331', u'20100630', u'20100930', u'20101231', \
 u'20110331', u'20110630', u'20110930', u'20111231', \
 u'20120331', u'20120630', u'20120930', u'20121231'
 ]

DATE_ARRAY = np.array(DATE_LIST,dtype='datetime64[us]')
stk_price = DataReader('600809.ss', 'yahoo', datetime(2006,1,1), datetime(2012,12,31)).reset_index()
rst = stk_price[stk_price.Date.isin(DATE_ARRAY)].Close
但是rst是空的


如何修复它或任何函数可以过滤结果?

使用
df.Date=df.Date.apply(lambda x:x.Date())
转换日期时间列

>>> df=DataFrame({'Date':[datetime(2006,1,1)]})
>>> df
                  Date
0  2006-01-01 00:00:00
>>> df.Date=df.Date.apply(lambda x:x.date())
>>> df
         Date
0  2006-01-01
编辑:

格式化日期列表的步骤

dates=[datetime.datetime.strptime(i, "%Y%m%d").date() for i in DATE_LIST]
最后使用
isin
过滤掉日期列表中的行:

df[df['Dates'].isin(dates)]
一次性(假设您有stk_price数据框,其中有一个名为Date的datecolumn):


使用
df.Date=df.Date.apply(lambda x:x.Date())
转换日期时间列

>>> df=DataFrame({'Date':[datetime(2006,1,1)]})
>>> df
                  Date
0  2006-01-01 00:00:00
>>> df.Date=df.Date.apply(lambda x:x.date())
>>> df
         Date
0  2006-01-01
编辑:

格式化日期列表的步骤

dates=[datetime.datetime.strptime(i, "%Y%m%d").date() for i in DATE_LIST]
最后使用
isin
过滤掉日期列表中的行:

df[df['Dates'].isin(dates)]
一次性(假设您有stk_price数据框,其中有一个名为Date的datecolumn):


您也可以将日期列表转换为时间戳,并直接使用这些时间戳为stk_价格编制索引,而不是将stk_价格日期转换为字符串(该字符串显示由于numpy错误而导致的错误日期,另请参见)。下面是包含随机数据的帧上的示例

In [16]: DATE_LIST = [
 u'20090331', u'20090630', u'20090930', u'20091231', \
 u'20100331', u'20100630', u'20100930', u'20101231', \
 u'20110331', u'20110630', u'20110930', u'20111231', \
 u'20120331', u'20120630', u'20120930', u'20121231'
 ]

In [17]: timestamps = [pd.Timestamp(date) for date in DATE_LIST]

In [18]: df = pd.DataFrame(np.random.randn(100,3), index=pd.date_range('20090331', periods=100))

In [19]: df.ix[timestamps].dropna()
Out[19]:
                   0         1         2
2009-03-31  0.520235  1.158889 -0.310227
2009-06-30  1.036449  0.528931 -0.083166

您也可以将日期列表转换为时间戳,并直接使用这些时间戳为stk_价格编制索引,而不是将stk_价格日期转换为字符串(该字符串显示由于numpy错误而导致的错误日期,另请参见)。下面是包含随机数据的帧上的示例

In [16]: DATE_LIST = [
 u'20090331', u'20090630', u'20090930', u'20091231', \
 u'20100331', u'20100630', u'20100930', u'20101231', \
 u'20110331', u'20110630', u'20110930', u'20111231', \
 u'20120331', u'20120630', u'20120930', u'20121231'
 ]

In [17]: timestamps = [pd.Timestamp(date) for date in DATE_LIST]

In [18]: df = pd.DataFrame(np.random.randn(100,3), index=pd.date_range('20090331', periods=100))

In [19]: df.ix[timestamps].dropna()
Out[19]:
                   0         1         2
2009-03-31  0.520235  1.158889 -0.310227
2009-06-30  1.036449  0.528931 -0.083166

如果你有两个不同的问题,不要把它们组合成一个问题。第二个问题很难理解——我建议你重新措辞,把它分开再问一遍。回答了第一个问题。如果你有两个不同的问题,不要把它们合并成一个问题。第二个问题很难理解——我建议你重新措辞,把它分开再问一遍。回答了第一个问题。stk_price=DataReader('600809.ss','yahoo',datetime(2006,1,1),datetime(2012,12,31))。reset_index();stk_价格['Date'][0]为。类型与日期()不匹配。stk_price[stk_price['Date'].isin(dates)]返回空数据框。是的,>>>dates=[datetime(*time.strtime(i,%Y%H%M')[:3])。Date()表示日期列表中的i]我不明白你的意思。那么,您是否可以直接粘贴代码,根据“日期列表”过滤掉“stk_价格”?谢谢…stk_price=DataReader('600809.ss','yahoo',datetime(2006,1,1),datetime(2012,12,31))。reset_index();stk_价格['Date'][0]为。类型与日期()不匹配。stk_price[stk_price['Date'].isin(dates)]返回空数据框。是的,>>>dates=[datetime(*time.strtime(i,%Y%H%M')[:3])。Date()表示日期列表中的i]我不明白你的意思。那么,您是否可以直接粘贴代码,根据“日期列表”过滤掉“stk_价格”?谢谢