08把数据放在空的DataFrame中

现在我们已经有了一个空的DataFrame,而且index已经被改造过了,现在我们就SPY数据放到这个空的DataFrame中。我们采取以下代码。

import pandas as pd def test_run(): start_date = '2013-01-01' end_date = '2013-01-05' dates = pd.date_range(start_date,end_date) df1 = pd.DataFrame(index = dates) print df1 dfSPY = pd.read_csv("data/SPY.csv") print dfSPY df1 = df1.join(dfSPY) print df1if __name__ == '__main__': test_run()

08把数据放在空的DataFrame中
文章图片
运行结果 结果显示,我们并没有将任何一个SPY的值放入到dataframe中,为什么会出现的这个情况?
1.原来SPY的index并没有经过改造,所以两者并没有什么交集可以加入。dfSPY拥有的索引,还是像原来的整数索引。我们在可以用以下代码,改造一下dfSPY的所以内容.
dfSPY = pd.read_csv("data/SPY.csv",index_col="Date",parse_date True)
新增加的参数设置,可以让原本的数据的日期作为index,parse_date设置为True,是为了解析我们的日期是符合pandas的默认设置的。
08把数据放在空的DataFrame中
文章图片
重新运行的结果 【08把数据放在空的DataFrame中】我们发现不开始的日期都会显示为NaN,而且我们也并不需要关注这么多指标,我们要进一步优化。
import pandas as pd def test_run(): start_date = '2013-01-01' end_date = '2013-01-07' dates = pd.date_range(start_date,end_date) df1 = pd.DataFrame(index = dates) #print df1 dfSPY = pd.read_csv("data/SPY.csv",index_col='Date',parse_dates = True, usecols=['Date','Adj Close'],na_values=['nan']) #print dfSPY df1 = df1.join(dfSPY) df1=df1.dropna() print df1if __name__ == '__main__': test_run()

usecols=['Date','Adj Close'],na_values=['nan']df1=df1.dropna()多使用了这两个语句。首先usecols=['Date','Adj Close']是用来提取我们需要关注的列的数据。na_values=['nan']是用"nan"来代替平常看到的缺失值。
df1=df1.dropna()是用来把确实的行去掉。
运行代码之后,我们就可以获得一个比较简洁的结果了。

08把数据放在空的DataFrame中
文章图片
运行结果
在完成join的时候,我们还有选择有其他的方式的组合。例如我们有一个交集的方式就可以直接省去去掉na的步骤了。
import pandas as pd def test_run(): start_date = '2013-01-01' end_date = '2013-01-07' dates = pd.date_range(start_date,end_date) df1 = pd.DataFrame(index = dates) #print df1 dfSPY = pd.read_csv("data/SPY.csv",index_col='Date',parse_dates = True, usecols=['Date','Adj Close'],na_values=['nan']) #print dfSPY df1 = df1.join(dfSPY,how = "inner") print df1if __name__ == '__main__': test_run()

同样可以获得相同的结果!

    推荐阅读