熊猫数据框类型错误

时间:2018-07-06 05:41:00

标签: python python-3.x pandas csv

我正在使用pandas数据帧读取csv文件。 test-data.log的内容

name 1 2 3
value 4 5 6
type int float char

我使用此脚本读取文件

import pandas as pd
url = "/usr/local/test-data.log"

dataframe = pd.read_csv(url, sep='\t', header=None)
df.dtypes

我得到的输出是所有条目都是object类型的,它必须是int,int,object

2 个答案:

答案 0 :(得分:0)

您的文件的制表符分隔不正确。看起来您有空格而不是制表符。在您的情况下,每一行都是一个字符串,即第一行中的数据是

name 1 2 3

您只有1列,而不是4列。这就是为什么您将其视为对象。

这是文件的外观:

name    1   2   3
value   4   5   6

在数据框上运行df.types后,您将看到4列和2行。

0    object
1     int64
2     int64
3     int64
dtype: object

答案 1 :(得分:0)

有2个问题:

  1. 您有用空格分隔的数据,而不是制表符分隔的数据。
  2. 如果列中的任何值为非数字值,则很可能以object类型读取。这是有道理的,因为选择的系列类型必须容纳该系列中的所有值。 object代表一系列指针,可以处理任意类型。

可以使用delim_whitespace=True解决问题(1)。

可以通过skipfooter=1排除最后一行来解决问题(2)。

这是一个演示:

from io import StringIO
import pandas as pd

mystr = StringIO("""StringIOname 1 2 3
value 4 5 6
type int float char""")

df = pd.read_csv(mystr, delim_whitespace=True, header=None, skipfooter=1)

print(df.dtypes)

0    object
1     int64
2     int64
3     int64
dtype: object