ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

pandas 列选择实战:保留、删除与重命名列的 pandas 写法及与 SAS、Stata、电子表格的对照

pandas 列选择实战:保留、删除与重命名列的 pandas 写法及与 SAS、Stata、电子表格的对照 pandas 列选择实战保留、删除与重命名列的 pandas 写法及与 SAS、Stata、电子表格的对照【免费下载链接】pandasFlexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more项目地址: https://gitcode.com/gh_mirrors/pa/pandas本文聚焦 pandas 中三种最基本的列级操作——按标签保留列、删除列、重命名列以官方对比文档中使用的tips数据集为贯穿示例给出每种操作的 pandas 写法、等价于 SAS / Stata / 电子表格的对应做法并结合 DataFrame.getitem、DataFrame.drop、DataFrame.rename 的源码实现讲清这些操作在内部如何解析标签、返回新对象以及出错的边界条件。读完后你能在不同工具间自如翻译列选择需求并理解 pandas 返回副本而非就地修改的设计约束。1. 背景三个对比文档共用的 tips 示例includes/column_selection.rst 是 pandas 文档与 SAS / Stata / 电子表格对比系列中Selection of columns小节共用的 pandas 代码片段它被三篇对比指南分别 includecomparison_with_sas.rst先讲 SAS 的DATA步骤关键字keep/drop/renamecomparison_with_stata.rst先讲 Stata 的keep/drop/rename命令comparison_with_spreadsheets.rst先讲电子表格中隐藏列、删除列、跨表引用列范围、修改表头单元格文字四种做法。三篇文档均以tips餐厅小费数据集为对象数据通过read_csv读入原始文件即仓库测试数据 tips.csv。下文沿用该数据依次演示保留部分列、删除一列、重命名列三个操作。2. 操作一保留指定列Keep certain columns片段给出的 pandas 写法是tips[[sex, total_bill, tip]]即对 DataFrame 传入一个列标签列表返回只含这些列的新 DataFrame。这里有两个值得注意的行为边界均可从源码得到解释列表选择是严格匹配。在 DataFrame.getitem中非单键路径先经check_dict_or_set_indexer(key)处理随后对列表型 key 调用indexer self.columns._get_indexer_strict(key, columns)[1]从源码结构看_get_indexer_strict要求列表中每一个标签都必须真实存在于列索引中否则抛出KeyError——这与 SAS 中keep了一个不存在的变量名会报错的行为一致而不是静默忽略。最终结果通过self.take(indexer, axis1)取列且列的顺序按列表给定与原表顺序无关。单标签与列表标签返回类型不同。同一段__getitem__的前半部分frame.py#L4280-L4292有单键快速路径当 key 可哈希且self.columns.get_loc(key)返回int该标签唯一出现一次时直接return self._get_item(key)即tips[sex]返回一个Series而tips[[sex, tip]]返回列表型 key走take路径返回DataFrame。因此保留单列若想仍得到 DataFrame需要写成tips[[sex]]。3. 操作二删除一列Drop a column片段给出的写法是tips.drop(sex, axis1)axis1表示从列轴移除标签sex返回不含该列的新 DataFrame原对象不变。结合 drop 的函数签名与文档字符串实际可用的参数比片段展示的更完整参数取值说明labels单个标签或标签列表要删除的行/列标签元组被视为单个标签而非可迭代对象axis0/index或1/columns从哪个轴删除默认0行index/columns标签或列表替代labels axis的写法df.drop(columnssex)等价于df.drop(sex, axis1)levelint 或 level 名针对 MultiIndex只从指定层删除标签errorsraise默认或ignoreignore时静默跳过不存在的标签其余标签照常删除两个与当前仓库版本直接相关的注意点返回新对象。drop默认返回副本文档字符串中inplace参数已标注自 3.1.0 起弃用、将在 pandas 4.0 移除见 PDEP-8所以新代码应始终写成tips tips.drop(sex, axis1)的形式而不是依赖就地修改。缺失标签的行为由errors控制。默认raise下删除不存在的列会抛KeyErrorerrorsignore适合若存在则删除的防御式清洗。这与 SAS 的drop变量不存在时仅警告语义并不完全相同跨工具迁移时需显式选择errors参数。删除多列可合并为一次调用tips.drop([sex, day], axis1)。4. 操作三重命名列Rename a column片段给出的写法是tips.rename(columns{total_bill: total_bill_2})columns接收一个{旧名: 新名}字典返回列名替换后的新 DataFrame未出现在字典中的列保持原名。DataFrame.rename 与drop同属返回新对象一族 API若需同时重命名行索引可另传index参数或mapper此处只涉及列级重命名。重命名一个常见的替代思路是直接替换列索引对象tips.columns [...]但从仓库当前版本的inplace弃用方向PDEP-8来看优先使用rename这类返回新对象的函数式写法更稳妥。5. 跨工具对照SAS / Stata / 电子表格中的同一批操作includes/column_selection.rst存在的意义正是把三篇对比文档中的列选择章节统一为同一组 pandas 代码。将各工具原文与 pandas 写法并排对照如下。SASDATA 步骤的 keep / drop / renamecomparison_with_sas.rst 中给出的 SAS 写法是data tips; set tips; keep sex total_bill tip; run; data tips; set tips; drop sex; run; data tips; set tips; rename total_billtotal_bill_2; run;对应的 pandas 写法依次为tips[[sex, total_bill, tip]]、tips.drop(sex, axis1)、tips.rename(columns{total_bill: total_bill_2})。SAS 的DATA步骤会生成新数据集这与 pandas 三个操作都返回新对象、不改原对象的语义方向一致。Stata命令行 keep / drop / renamecomparison_with_stata.rst 中对应命令为keep sex total_bill tip drop sex rename total_bill total_bill_2注意 Stata 的keep与drop是就地作用于当前数据集的而 pandas 的三个操作都返回新 DataFrame从 Stata 迁移到 pandas 时需要显式接收返回值df df.drop(...)否则修改会丢失。电子表格隐藏、删除、引用与改表头comparison_with_spreadsheets.rst 指出电子表格中选择列的常见手段有四种隐藏列不真删、删除列、把某个工作表的一段列引用到另一张表、以及直接修改表头行第一个单元格的文字来完成重命名。pandas 侧的对应关系是引用一段列到新工作表 →tips[[sex, total_bill, tip]]列子集投影删除列 →tips.drop(sex, axis1)改表头文字 →tips.rename(columns{total_bill: total_bill_2})。电子表格隐藏列并不移除数据没有精确的 pandas 等价物若目标是导出时少一列直接用投影或drop更符合数据即代码的显式风格。6. 小结与使用要点把 includes/column_selection.rst 的三行操作归纳成一张速查表目的pandas 写法返回关键行为源码依据保留部分列tips[[sex, total_bill, tip]]新 DataFrame列表标签严格匹配缺失即KeyError结果列按列表排序getitem删除一列tips.drop(sex, axis1)新 DataFrame可加errorsignoreinplace已弃用drop重命名列tips.rename(columns{total_bill: total_bill_2})新 DataFrame字典式映射未命名列不变rename三条实践要点始终接收返回值。三个操作都不会修改原 DataFrame且当前版本的inplace关键字已被弃用链式接收df df.drop(...)是唯一推荐写法。单列取 Series、多列取 DataFrame。tips[sex]返回 Seriestips[[sex]]返回 DataFrame投影后继续做列操作时注意类型差异。跨工具迁移时对齐严格 vs 宽容语义。SAS/Stata 中删除不存在的变量通常只是告警或报错pandas 需通过errorsignore显式选择宽容模式而列表取列则始终是严格匹配。本文所有代码与行为描述基于当前仓库的文档与源码可直接对照 comparison 系列文档 及 frame.py 进一步阅读。【免费下载链接】pandasFlexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more项目地址: https://gitcode.com/gh_mirrors/pa/pandas创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表