Pandas 基础:DataFrame 内存与操作

PythonPythonBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

欢迎来到 Pandas 基础实验!在本实验中,我们将探索 Pandas 库的一些基本方面:DataFrame 的内存使用、处理 if/真值语句、使用用户定义函数 (UDF) 方法、处理 NA 值、与 NumPy 的差异以及线程安全注意事项。

虚拟机提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

了解 DataFrame 的内存使用情况

Pandas 提供了多种方法来了解 DataFrame 的内存使用情况。.info() 方法可用于查看摘要,包括内存使用情况。

import pandas as pd
import numpy as np

## 创建一个 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")

## 显示 DataFrame 信息
df.info()

在 Pandas 中使用 if/真值语句

由于存在歧义,Pandas 不支持直接使用 if/真值语句。相反,请使用 .any().all().empty() 等方法。

## 检查 Series 中是否有任何值为 True
if pd.Series([False, True, False]).any():
    print("At least one True value in the Series")

使用用户定义函数 (UDF) 方法进行变异操作

在使用接受 UDF 的 pandas 方法时,避免在 UDF 内部修改 DataFrame。相反,在进行更改之前先进行复制。

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")

处理缺失值

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 在计算方差的方式上存在细微差异。在两个库之间切换时,这一点需要加以考虑。

## pandas 中的方差
var_pandas = df.var()

## NumPy 中的方差
var_numpy = np.var(df.values)

考虑 Pandas 中的线程安全问题

Pandas 并非完全线程安全。在多个线程之间共享 Pandas 对象时要谨慎。

处理字节序问题

在处理由字节序不同的机器创建的数据时,你可能会遇到字节序问题。在将数据传递给 Pandas 之前,将其转换为本机系统字节序。

x = np.array(list(range(10)), ">i4")  ## 大端序
newx = x.byteswap().newbyteorder()  ## 强制转换为本机字节序
s = pd.Series(newx)

总结

在本实验中,我们探讨了 Pandas 库的一些关键方面。理解这些方面将帮助你更有效地使用 Pandas 并避免常见的陷阱。