Pandas read_csv: Опции low_memory и dtype
Я получаю предупреждение при загрузке CSV-файла с помощью pandas:
df = pd.read_csv('somefile.csv')
Сообщение об ошибке следующее:
.../site-packages/pandas/io/parsers.py:1130:
DtypeWarning: Columns (4,5,7,16) have mixed types. Specify dtype option on import or set low_memory=False.
Я не понимаю, почему опция dtype
связана с low_memory
, и почему установка low_memory=False
может помочь? Можете объяснить, как это работает и в каких случаях это может быть полезно?
4 ответ(ов)
Проблема часто возникает из-за того, что pandas по умолчанию пытается оптимизировать память, что может привести к ошибкам при чтении больших файлов. Использование параметра low_memory=False
позволяет pandas обрабатывать файл более эффективно. Вот как вы можете это сделать:
df = pd.read_csv('somefile.csv', low_memory=False)
Это должно решить вашу проблему. Я столкнулся с аналогичной ошибкой при чтении 1.8 миллионов строк из CSV, и это решение помогло мне. Попробуйте!
Это сработало для меня!
file = pd.read_csv('example.csv', engine='python')
Как уже упоминал firelynx, если dtype указан явно и в данных присутствуют несоответствующие значения, загрузка может завершиться ошибкой. Я использовал конвертер подобный этому в качестве обходного решения, чтобы изменить значения с несовместимым типом данных, чтобы данные все-таки могли быть загружены.
def conv(val):
if not val:
return 0
try:
return np.float64(val)
except:
return np.float64(0)
df = pd.read_csv(csv_file, converters={'COL_A': conv, 'COL_B': conv})
Таким образом, при наличии несовместимых данных, конвертер будет возвращать 0, что позволит избежать ошибок при загрузке файла CSV.
Это сработало для меня с low_memory = False
при импорте DataFrame. Вот единственное изменение, которое помогло:
df = pd.read_csv('export4_16.csv', low_memory=False)
Создание нового столбца на основе значений других столбцов / Применение функции к нескольким столбцам построчно в Pandas
Преобразование DataFrame Pandas в массив NumPy
Преобразование списка словарей в DataFrame pandas
Объединение двух столбцов текста в DataFrame pandas
Выбор строки из pandas Series/DataFrame по целочисленному индексу