Введение
Добро пожаловать в лабораторию по основам Pandas! В этой лаборатории мы рассмотрим некоторые фундаментальные аспекты библиотеки Pandas: использование памяти DataFrame, обработку if/истинностных выражений, использование методов пользовательских определенных функций (UDF), работу с значениями NA, различия с NumPy и вопросы безопасности потоков.
Советы по ВМ
После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook, чтобы получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Понимание использования памяти DataFrame
Pandas предоставляет несколько методов для понимания использования памяти DataFrame. Метод .info() можно использовать, чтобы увидеть сводку, включая использование памяти.
import pandas as pd
import numpy as np
## Create a DataFrame
dtypes = ["int64", "float64", "datetime64[ns]", "timedelta64[ns]", "complex128", "object", "bool"]
n = 5000
data = {t: np.random.randint(100, size=n).astype(t) for t in dtypes}
df = pd.DataFrame(data)
df["categorical"] = df["object"].astype("category")
## Display DataFrame info
df.info()
Использование if/истинностных выражений с Pandas
Pandas не поддерживает непосредственное использование if/истинностных выражений из-за неоднозначности. Вместо этого используйте методы, такие как .any(), .all() или .empty().
## Check if any value in the Series is True
if pd.Series([False, True, False]).any():
print("At least one True value in the Series")
Мутация с использованием методов пользовательских определенных функций (UDF)
При использовании метода pandas, который принимает UDF, избегайте изменения DataFrame внутри UDF. Вместо этого сделайте копию перед внесением изменений.
def f(s):
s = s.copy()
s.pop("a")
return s
df = pd.DataFrame({"a": [1, 2, 3], 'b': [4, 5, 6]})
df.apply(f, axis="columns")
Работа с пропущенными значениями (NA)
Pandas предоставляет расширенные типы данных для целых чисел с возможностью наличия пропущенных значений.
s_int = pd.Series([1, 2, 3, 4, 5], index=list("abcde"), dtype=pd.Int64Dtype())
s2_int = s_int.reindex(["a", "b", "c", "f", "u"])
Понимание различий с NumPy
В Pandas и NumPy есть небольшие различия в том, как они вычисляют дисперсию. Это важно учитывать при переходе между двумя библиотеками.
## Variance in pandas
var_pandas = df.var()
## Variance in NumPy
var_numpy = np.var(df.values)
Взгляд на безопасность потоков в Pandas
Pandas не является полностью безопасным для потоков. Будьте осторожны при совместном использовании объектов Pandas в нескольких потоках.
Решение проблем с порядком байтов
При работе с данными, созданными на машине с другим порядком байтов, вы можете столкнуться с проблемами порядка байтов. Преобразуйте данные в местный порядок байтов системы перед передачей их в Pandas.
x = np.array(list(range(10)), ">i4") ## big endian
newx = x.byteswap().newbyteorder() ## force native byteorder
s = pd.Series(newx)
Резюме
В этом практическом занятии мы изучили некоторые важные аспекты библиотеки Pandas. Понимание этих аспектов поможет вам более эффективно использовать Pandas и избегать распространенных ошибок.