python - 格式化 csv 以允许 numpy 制作数据框

标签 python csv numpy pandas

我正在尝试使用 numpy 读取此 CSV 文件。我正在关注this tutorial但我的数据格式与他们的示例不同

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

我需要在开始时格式化日期,我一直在网上关注其他人的问答并意识到我需要这样的东西pd.read_csv('BTC.csv', dayfirst=True, parse_dates=[0 ])但不知道如何实现它。

感谢您的宝贵时间

编辑:数据最初取自 from here ,我编写了一个脚本来分割每一行。然而,从 jezrael 的评论来看,打印数据框会产生与此类似的格式!那么也许我可以直接将此文本输入 pandas ?

最佳答案

您可以在函数 read_csv 中使用参数 sep 作为任意空格:\s+loc :

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 dataframe转换为numpy 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]]

编辑:

您必须省略分隔符,因为 sep=',' 是默认值(感谢 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  

关于python - 格式化 csv 以允许 numpy 制作数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34916412/

相关文章:

python - Python 字符串中的内联子字符串交换

Python numpy uint64 在除法时转换为 float

c - 调试 c 中读取的 csv

c++通过csv文件和最后一列进行解析

python - Seaborn 分布图 : unsupported operand type(s) for/: 'str' and 'int'

python - 如何以字节为单位获取 numpy 的数字类型的大小?

python - 永远在 python 中运行计时器

Python WAND 仅转换第一个 PDF 页面

python - 如何验证虚拟环境的完整性

powershell - 使用 Powershell 将 csv 导入到 SharePoint 列表