July 2025
Intermediate to advanced
320 pages
3h 10m
Chinese
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
我们可以使用 pandas 等通用工具和 pyjanitor 等专用工具来帮助清理数据。
使用 pandas 时,使用 Python 友好的列名可以实现属性访问。pyjanitorclean_names 函数会返回一个列用小写、空格用下划线替换的 DataFrame:
>>>importjanitorasjn>>>Xbad=pd.DataFrame(...{..."A":[1,None,3],..." sales numbers ":[20.0,30.0,None],...}...)>>>jn.clean_names(Xbad)a _sales_numbers_0 1.0 20.01 NaN 30.02 3.0 NaN
我建议使用索引赋值、.assign 方法、.loc 或.iloc 赋值更新列。我还建议不要使用属性赋值来更新 pandas 中的列。由于存在覆盖与列同名的现有方法的风险,属性赋值不能保证有效。
pyjanitor 库很方便,但不允许我们删除列周围的空白。我们可以使用 pandas 对列重命名进行更精细的控制:
>>>defclean_col(name):...return(...name.strip().lower().replace(" ","_")...)>>>Xbad.rename(columns=clean_col)a sales_numbers0 1.0 20.01 NaN 30.02 3.0 NaN
pyjanitor 中的coalesce 函数接收一个 DataFrame 和一个需要考虑的列列表。这与 Excel 和 SQL 数据库中的功能类似。它会返回每一行的第一个非空值:
>>>jn.coalesce(...Xbad,...columns=["A"," sales numbers "],...new_column_name="val",...)val0 1.01 30.02 3.0
如果我们想用特定值填补缺失值,可以使用 DataFrame.fillna 方法:
>>>Xbad.fillna(10)A sales numbers0 1.0 20.01 10.0 30.02 3.0 10.0
或 pyjanitorfill_empty 函数:
>>>jn.fill_empty(...Xbad,...columns=["A"," sales numbers "],...value=10,...)A sales numbers0 1.0 20.01 10.0 30.02 3.0 10.0
通常,我们会在 pandas、scikit-learn 或 fancyimpute 中使用更细粒度的估算来执行每列的空替换。
在创建模型之前,您可以使用 pandas 来确保您已经处理了所有的缺失值,以此作为正确性检查。如果 DataFrame 中有任何单元格缺失,下面的代码会返回一个布尔值:
>>>df.isna().any().any()True
Read now
Unlock full access