pd.read_csv给了我str但需要浮动

时间:2017-08-03 07:52:07

标签: python pandas numpy

我的CSV看起来像这样:

Date,Open,High,Low,Close,Adj Close,Volume
2007-07-25,4.929000,4.946000,4.896000,4.904000,4.904000,0
2007-07-26,4.863000,4.867000,4.759000,4.777000,4.777000,0
2007-07-27,4.741000,4.818000,4.741000,4.788000,4.788000,0
2007-07-30,4.763000,4.810000,4.763000,4.804000,4.804000,0

data = pd.read_csv(file, index_col='Date').drop(['Open','Close','Adj Close','Volume'], axis=1)

我最终得到的df看起来像这样:

                High       Low
Date                          
2007-07-25  4.946000  4.896000
2007-07-26  4.867000  4.759000
2007-07-27  4.818000  4.741000
2007-07-30  4.810000  4.763000
2007-07-31  4.843000  4.769000

现在我想得到高 - 低。尝试:

np.diff(data.values, axis=1)

但是收到错误:不支持的操作数类型 - :'str'和'str'

但确定为什么df中的值首先是str。感谢任何解决方案。

2 个答案:

答案 0 :(得分:5)

我认为您需要to_numeric errors='coerce',因为似乎有一些不良数据:

data = pd.read_csv(file, index_col='Date', usecols=['High','Low'])

data = data.apply(pd.to_numeric, errors='coerce')

答案 1 :(得分:1)

read_csv dtype选项不起作用?

来自documentation

dtype:列名称或列的词典 - > type,默认无 数据或列的数据类型。例如。 {'a':np.float64,'b':np.int32}使用str或object来保留和不解释dtype。如果指定了转换器,它们将应用于dtype转换的INSTEAD。

data = pd.read_csv(file,
    index_col='Date',
    usecols=['High','Low'],
    dtype={'High': np.float64, 'Low': np.float64})