Что если мне нужно получить столбцы со смешанными типами? - PullRequest
0 голосов
/ 20 октября 2018

панд: 0.23.4

Согласно документации мы получаем DtypeWarning: столбцы (0) имеют смешанные типы, если данные содержат int и str, и этопредложил установить low_memory = False, и это удаляет предупреждение.Но моя задача противоположна: определить столбцы со смешанными типами!

Сначала я подумал о том, чтобы проанализировать сообщение DtypeWarning, чтобы понять, какие столбцы имеют смешанный тип, но я столкнулся со многими трудностями, которые мешают мнеполагаясь на DtypeWarning:

  1. Если вы уменьшите количество строк с 300 000 до 250 000, то DtypeWarning больше не будет отображаться, но мне нужно его как минимум для 100 000 строк
  2. Даже для 300 000 строкстолбец не всегда определяется смешанными типами, например, я изменяю фрейм данных из doc :

Из документов:

df = pd.DataFrame({'a': (['1'] * 100000 + ['X'] * 100000 + ['1'] * 100000), 'b': ['b'] * 300000})
df.to_csv('test.csv', index=False)
df2 = pd.read_csv('test.csv')
# DtypeWarning: Columns (0) have mixed types

Мой случай:

df = pd.DataFrame({'a': ([1] * 10000 + ['X'] * 10000 + [1] *  10000) * 10, 'b': ['b'] * 300000})
df.to_csv('test.csv', index=False)
df2 = pd.read_csv('test.csv')
# No warning

Все еще имеет смешанные типы, но предупреждение не появляется.И если я анализирую типы, все это str.Т.е. я не могу анализировать смешанные типы даже сам.

Итак, как я могу получить столбцы со смешанными типами?Можно ли добавить параметр read_csv (mixed_types = True) и заставить панд не скрывать смешанные типы для всех наборов данных или как минимум для 100 000 строк?Или есть идеи?

Спасибо.

Резюме

Кажется, что pandas не позволяет узнать, какие столбцы имеют смешанные типы, а наоборот скрывает смешанные типы за dtype.object с str внутри.DtypeWarning как исключение из правил. Ссылка из @pygo answer объясняет случайность предупреждения Dtype.

1 Ответ

0 голосов
/ 20 октября 2018

Должны работать как строки, так и столбцы.

low_memory: логическое значение, по умолчанию True

Внутренняя обработка файла фрагментами, что приводит к меньшему использованию памяти при разборе, но возможно смешанномувывод типа.Чтобы гарантировать отсутствие смешанных типов, либо установите False, либо укажите тип с параметром dtype.Обратите внимание, что весь файл считывается в один DataFrame независимо, используйте параметр chunksize или итератор для возврата данных в виде фрагментов.(Действителен только для синтаксического анализатора C)

Это Со страницы github

Это детерминистический тип, который последовательно выводится на основании того, что в данных,Тем не менее, внутренний размер фрагмента - это не фиксированное количество строк, а байты, так что, можете ли вы смешать предупреждение dtype или нет, вы можете чувствовать себя немного случайным.

Я думаю, вам не следует беспокоиться оэти сообщения, так как эти сообщения об ошибках являются общими.

ИЛИ

df2 = pd.read_csv('test.csv', engine='c', dtype={'FULL': 'str', 'COUNT': 'int'}, header=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...