Не используйте дезинфицированную функцию mysql_ * (лишенная php 5.5 будет удалена в php 7). и вы можете сделать это с помощью mysqli или pdo
здесь полный запрос выбора
connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
// code here
}
} else {
echo "0 results";
}
$conn->close();
?>
Решение, если нужно создать один большой DataFrame
, если необходимо обрабатывать все данные сразу (возможно, но не рекомендуется ):
Затем используйте concat для всех фрагментов в df, потому что тип вывода функции:
df = pd.read_csv('Check1_900.csv', sep='\t', iterator=True, chunksize=1000)
не является фреймворком данных, а pandas.io.parsers.TextFileReader
- источником .
tp = pd.read_csv('Check1_900.csv', sep='\t', iterator=True, chunksize=1000)
print tp
#<pandas.io.parsers.TextFileReader object at 0x00000000150E0048>
df = pd.concat(tp, ignore_index=True)
Я думаю, что необходимо добавить параметр игнорировать индекс в функцию concat
, так как избегать двуличности индексов.
EDIT:
Но если вы хотите работать с большими данными, такими как агрегирование, гораздо лучше использовать dask
, поскольку он обеспечивает расширенный параллелизм.
Здесь вы не нуждаетесь concat
. Это похоже на запись sum(map(list, grouper(tup, 1000)))
вместо list(tup)
. Единственное, что делают iterator
и chunksize=1000
, это дать вам объект-читатель, который повторяет 1000-строчные DataFrames вместо того, чтобы читать все это. Если вы хотите все сразу, просто не используйте эти параметры.
Но если чтение всего файла в память сразу слишком дорого (например, занимает так много памяти, что вы получаете MemoryError
, или замедлить вашу систему до обхода, выбросив ее в swap hell), это именно то, что chunksize
для.
Проблема в том, что вы назвали результирующий итератор df
, а затем попытались используйте его как DataFrame. Это не DataFrame; это итератор, который дает вам 1000-строчные DataFrames один за другим.
Когда вы говорите это:
Моя проблема: я не знаю, как использовать такие вещи, как эти ниже для всего df, а не только для одного фрагмента
blockquote>. Ответ заключается в том, что вы не можете . Если вы не можете загрузить все это в один гигантский DataFrame, вы не сможете использовать один гигантский DataFrame. Вы должны переписать свой код вокруг кусков.
Вместо этого:
df = pd.read_csv('Check1_900.csv', sep='\t', iterator=True, chunksize=1000) print df.dtypes customer_group3 = df.groupby('UserID')
... вам нужно делать такие вещи:
for df in pd.read_csv('Check1_900.csv', sep='\t', iterator=True, chunksize=1000): print df.dtypes customer_group3 = df.groupby('UserID')
Часто , то, что вам нужно сделать, это объединить некоторые данные - уменьшить каждый кусок до чего-то гораздо меньшего с помощью только тех частей, которые вам нужны. Например, если вы хотите суммировать весь файл по группам, вы можете
groupby
каждый фрагмент, затем суммировать кусок по группам и хранить серию / массив / список / dict для текущих итогов для каждой группы.Конечно, это немного сложнее, чем просто суммирование гигантской серии сразу, , но вокруг этого нет . (За исключением покупки большего количества оперативной памяти и / или переключения на 64 бита.) Вот как
iterator
иchunksize
решают проблему: разрешая вам делать этот компромисс, когда вам нужно.
Вам нужно объединить патроны. Например:
df2 = pd.concat([chunk for chunk in df])
И затем запустите свои команды на df2