2016-01-21 45 views
1

我正尝试使用numpy读取此CSV文件。我下面this tutorial但我的数据格式不同其例子将csv格式化为允许numpy制作数据帧

Here's a my csv data

,我使用的代码:

import datetime as dt 
import pandas as pd 
import numpy as np 


na_data = np.loadtxt('BTC.csv', delimiter=',', skiprows=2) 
na_price = na_data[:, 3:4] 
na_dates = np.str_(na_data[:, 0:1]) 

print na_price 
print na_dates 

ValueError: invalid literal for float(): 09/08/2015 

我需要在一开始格式化的日期,我我一直在关注其他人Q & A的在线和意识到我需要这样的东西​​但无法弄清楚如何实现它。

谢谢您的时间

编辑:指数据最初采取from here,我写了一个脚本来分割每行。然而,从jezrael的评论,打印数据框产生一个类似于这个格式!那么也许我可以直接将这些文本直接提供给熊猫?在功能read_csvloc\s+

回答

2

您可以使用参数sep作为arbitary空白

import pandas as pd 
import io 

temp=u"""Date  low  open close high BTC_vol 
08/08/2015 266  280.04 266.82 280.32 273.43 
09/08/2015 260.88 264  265.52 267.6 264.76 
10/08/2015 262.17 265.69 265.1 267.72 265.395 """ 
#after testing replace io.StringIO(temp) to filename 
df = pd.read_csv(io.StringIO(temp), sep="\s+", parse_dates=[0], dayfirst=True) 
print df 
#  Date  low open close high BTC_vol 
#0 2015-08-08 266.00 280.04 266.82 280.32 273.430 
#1 2015-08-09 260.88 264.00 265.52 267.60 264.760 
#2 2015-08-10 262.17 265.69 265.10 267.72 265.395 

print df.loc[2, 'Date'] 
#2015-08-10 00:00:00 

print df.loc[2, 'close'] 
#265.1 

如果你想转换pandas dataframenumpy array使用values

print df.values 
#[[Timestamp('2015-08-08 00:00:00') 266.0 280.04 266.82 280.32 273.43] 
# [Timestamp('2015-08-09 00:00:00') 260.88 264.0 265.52 267.6 264.76] 
# [Timestamp('2015-08-10 00:00:00') 262.17 265.69 265.1 267.72 265.395]] 

编辑:

因为01,你必须省略分隔符是默认值(感谢Anton):

import pandas as pd 

df = pd.read_csv('test/BTC.csv',parse_dates=[0], dayfirst=True) 
print df.head() 

      D  low open close  high Unnamed: 5  BTC_vol \ 
0 2015-08-08 266.00 280.04 266.82 280.32  273.430 29915.158940 
1 2015-08-09 260.88 264.00 265.52 267.60  264.760 16578.024530 
2 2015-08-10 262.17 265.69 265.10 267.72  265.395 10780.629240 
3 2015-08-11 264.81 265.09 269.57 270.30  267.330 9817.758063 
4 2015-08-12 265.80 269.30 269.84 273.75  269.570 14290.615450 

    USD_vol Unnamed: 8 Unnamed: 9 
0 8116830   0 281.312854 
1 4382630   0 279.808773 
2 2856790   0 278.407937 
3 2619460   0 277.566229 
4 3848950   0 276.830398 
+0

好了,所以这是有趣的,首先感谢您的答复,它的赞赏。我从电子表格中复制了示例文本,但没有正确格式化,我已将其直接链接到数据中。 –

+0

你可以忽略'sep'因为'sep =',''是默认值 –

+0

对不起,我检查了你的旧问题,没有答案[接受](http://meta.stackexchange.com/questions/5234/如何-不接受-的回答工作)。也许你可以接受他们,如果他们工作。谢谢。 – jezrael