панд: 0.23.4
Согласно документации мы получаем DtypeWarning: столбцы (0) имеют смешанные типы, если данные содержат int
и str
, и этопредложил установить low_memory = False, и это удаляет предупреждение.Но моя задача противоположна: определить столбцы со смешанными типами!
Сначала я подумал о том, чтобы проанализировать сообщение DtypeWarning, чтобы понять, какие столбцы имеют смешанный тип, но я столкнулся со многими трудностями, которые мешают мнеполагаясь на DtypeWarning:
- Если вы уменьшите количество строк с 300 000 до 250 000, то DtypeWarning больше не будет отображаться, но мне нужно его как минимум для 100 000 строк
- Даже для 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.