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

ste*_*eff 3 python numpy pandas

我有一个看起来像这样的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
Run Code Online (Sandbox Code Playgroud)

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

我最终得到一个看起来像这样的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
Run Code Online (Sandbox Code Playgroud)

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

np.diff(data.values, axis=1)
Run Code Online (Sandbox Code Playgroud)

但得到一个错误:不支持的操作数类型 - :'str'和'str'

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

Séb*_* S. 7

read_csv dtype 选项不起作用?

\n\n

文档中\ndtype :类型列的名称或字典 -> 类型,默认 None\n数据或列的数据类型。例如 {\xe2\x80\x98a\xe2\x80\x99: np.float64, \xe2\x80\x98b\xe2\x80\x99: np.int32} 使用 str 或 object 来保留而不解释 dtype。如果指定了转换器,则将应用它们而不是数据类型转换。

\n\n
data = pd.read_csv(file,\n    index_col=\'Date\',\n    usecols=[\'High\',\'Low\'],\n    dtype={\'High\': np.float64, \'Low\': np.float64})\n
Run Code Online (Sandbox Code Playgroud)\n


jez*_*ael 5

我认为你需要to_numeric,errors='coerce'因为它似乎有一些不好的数据:

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

data = data.apply(pd.to_numeric, errors='coerce')
Run Code Online (Sandbox Code Playgroud)