【问题标题】:Formatting csv to allow numpy to make a data frame格式化 csv 以允许 numpy 制作数据框
【发布时间】:2016-04-27 06:21:49
【问题描述】:

我正在尝试使用 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 的评论,打印数据框会产生类似于此的格式!所以也许我可以直接把这个文本输入熊猫?

【问题讨论】:

    标签: python csv numpy pandas


    【解决方案1】:

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

    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  
    

    【讨论】:

    • 好的,这很有趣,首先感谢您的回复,非常感谢。我从电子表格中复制了示例文本,但格式不正确,我已复制到数据的直接链接中。
    • 你可以省略sep,因为sep=','是默认值
    • 抱歉,我检查了您的旧问题,但没有答案是 accepted。如果他们有效,也许你可以接受他们。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多