Параметр low_memory
устарел неправильно, но он должен быть, поскольку он фактически не делает ничего по-другому [ source ]
Причина, по которой вы получаете это предупреждение low_memory
, состоит в том, что угадывание dtypes для каждого столбца очень требует памяти. Pandas пытается определить, какой dtype задавать, анализируя данные в каждом столбце.
Pandas может определять только то, что должен иметь столбец dtype после всего файла читается. Это означает, что ничего не может быть проанализировано до того, как весь файл будет прочитан, если вы не рискуете изменить dtype этого столбца при чтении последнего значения.
Рассмотрим пример одного файла с столбцом user_id , Он содержит 10 миллионов строк, где user_id всегда является числом. Поскольку панды не могут знать, что это только цифры, это, вероятно, сохранит их как исходные строки, пока не прочитает весь файл.
/ g15]
dtype={'user_id': int}
к вызову pd.read_csv()
заставит pandas знать, когда он начнет считывать файл, что это только целые числа.
Также стоит отметить что если бы последняя строка в файле имела бы "foobar"
, записанную в столбце user_id
, загрузка была бы сбой, если указан указанный выше тип dtype.
import pandas as pd
from StringIO import StringIO
csvdata = """user_id,username
1,Alice
3,Bob
foobar,Caesar"""
sio = StringIO(csvdata)
pd.read_csv(sio, dtype={"user_id": int, "username": object})
ValueError: invalid literal for long() with base 10: 'foobar'
dtypes, как правило, многозначительные вещи, подробнее о них здесь: http://docs.scipy.org/doc/numpy/reference/generated/numpy.dtype.html
Это numpy dtypes, которые также принимаются в pandas
[numpy.generic,
[[numpy.number,
[[numpy.integer,
[[numpy.signedinteger,
[numpy.int8,
numpy.int16,
numpy.int32,
numpy.int64,
numpy.int64,
numpy.timedelta64]],
[numpy.unsignedinteger,
[numpy.uint8,
numpy.uint16,
numpy.uint32,
numpy.uint64,
numpy.uint64]]]],
[numpy.inexact,
[[numpy.floating,
[numpy.float16, numpy.float32, numpy.float64, numpy.float128]],
[numpy.complexfloating,
[numpy.complex64, numpy.complex128, numpy.complex256]]]]]],
[numpy.flexible,
[[numpy.character, [numpy.bytes_, numpy.str_]],
[numpy.void, [numpy.record]]]],
numpy.bool_,
numpy.datetime64,
numpy.object_]]
Pandas также добавляет два типа dtypes: categorical
и datetime64[ns, tz]
, которые недоступны в numpy
Settin g dtype=object
отключит вышеуказанное предупреждение, но не сделает его более эффективным с точки зрения памяти, только эффективно.
Настройка dtype=unicode
ничего не сделает, поскольку до numpy, unicode
представленный как object
.
@sparrow правильно указывает на использование преобразователей, чтобы избежать взрыва панд при столкновении 'foobar'
в столбце, указанном как int
, Я хотел бы добавить, что преобразователи действительно тяжелы и неэффективны для использования в пандах и должны использоваться в качестве последнего средства. Это связано с тем, что процесс read_csv представляет собой один процесс.
Файлы CSV могут обрабатываться по строкам и, следовательно, могут быть обработаны несколькими преобразователями параллельно более эффективно, просто разбивая файл на сегменты и запуская несколько процессов, то, что панды не поддерживают. Но это совсем другая история.
Если Вы используете апача в качестве веб-сервера, можно переопределить (при разрешении его), настройки с помощью .htaccess файлы. См. руководство PHP для деталей.
В основном Вы помещаете файл, названный .htaccess в Вашем корне веб-сайта, который содержит некоторые значения PHP ini
. Если Вы настроили Apache для разрешения переопределений, этот сайт будет использовать все значения в конфигурации PHP, + значения, которые Вы указываете в файл .htaccess .
Может использоваться только с
PHP_INI_ALL
иPHP_INI_PERDIR
директивы типа
, как указано в странице, которую я связал. Если Вы нажимаете до полного списка, Вы видите, что включать путь PHP_INI_ALL
директива.
Erik Van Brakel дал, по моему скромному мнению, один из лучших ответов.
[еще 111], если Вы используете Apache & Виртуальные хосты, можно настроить, включает непосредственно в них. Используя этот метод, Вы не должны будете помнить оставлять команды php_admin в своем .htaccess.
Можно установить include_path
в файле php.ini также. Я - парень жемчуга, таким образом, я ожидаю мочь загрузиться, включает, и имейте include
, делают правильную вещь. У меня есть все, что мой включает в определенный каталог, который добавляется к include_path
. Я могу сделать вещи как
require_once "ClassName.php";
, я не должен волноваться об относительных путях или местоположениях файлов.
я также записал свое собственное CustomRequire
, чтобы сделать вещи как
function CustomRequire ($file) {
if(defined('MYINCLUDEPATH')) {
require_once MYINCLUDEPATH . "/$file";
} else {
require_once $file;
}
}
Тот способ, которым я могу измениться, как я делаю включает позднее. Конечно, все еще необходимо найти способ включать Ваш включать код :)
В зависимости от того, как настраивается Ваш хост, Вам можно разрешить поместить php.ini
файл в корне Вашего корневого каталога с дополнительными конфигурационными директивами.
Используйте php.ini файл в веб-сайте корень , если Ваша установка использует PHP в качестве CGI (самый частый случай на общих хостах) с тем же синтаксисом как всего сервера php.ini ; выразитесь в .htaccess
, если у Вас есть PHP как модуль Apache (сделайте phpinfo()
если не уверенный):
php_value include_path "wherever"
Примечание, что на папку php.ini does
не влияние подпапки .
Ваше приложение должно иметь файл конфигурации, написанный на PHP. Затем включите это с соответствующей страницей в каждую страницу в программе. Этот конфигурационный файл будет иметь переменную для пути к каталогу include, каталогу шаблонов, каталогу изображений и т. Д.
Почему вы думаете, что добавление для включения пути является плохой практикой?
Этот код в верхней части корневого скрипта не должен быть таким уж плохим...
$path = '/path/to/site/includes/';
set_include_path($path . PATH_SEPARATOR . get_include_path());
ИМХО главное преимущество в том, что он переносим и совместим не только с Apache
РЕДАКТИРОВАТЬ: я видел недостаток этого метода: маленький влияние производительности. см. http://www.geeksengine.com/article/php-include-path.html