Ошибка в типах данных Panda - PullRequest
0 голосов
/ 06 июля 2018

Я читаю csv-файл, используя кадры данных pandas. содержимое 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

вывод, который я получаю - все записи имеют тип объекта, где он должен быть int, int, object

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Есть 2 вопроса:

  1. У вас есть данные через пробел, а не через табуляцию.
  2. Если какое-либо значение в столбце не является числовым, оно, скорее всего, будет читаться как тип object. Это имеет смысл, поскольку выбранный тип серии должен учитывать все значения в серии. object представляет серию указателей, которые могут обрабатывать произвольные типы.

Проблема (1) может быть решена с помощью delim_whitespace=True.

Проблема (2) может быть решена путем исключения последней строки через skipfooter=1.

Вот демоверсия:

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
0 голосов
/ 06 июля 2018

Ваш файл не разделен табуляцией правильно. Похоже, у вас есть пробелы вместо вкладок. В вашем случае каждая строка является строкой, то есть данные в первой строке

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...