·
日常编程 ·
129114
本文介绍一种简洁高效的方法,利用 NumPy 对 DataFrame 中指定两列进行逐行排序并反向切片,自动将每行中数字型值“归位”到目标列(如 age),字符串值则移至另一列(如 last_name),无需手动判断类型或循环。
本文介绍一种简洁高效的方法,利用 numpy 对 dataframe 中指定两列进行逐行排序并反向切片,自动将每行中数字型值“归位”到目标列(如 `age`),字符串值则移至另一列(如 `last_name`),无需手动判断类型或循环。
在实际数据清洗中,常遇到列内容错位的问题:例如本例中 last_name 列混入了年龄数值(如第1行的 36),而 age 列却出现了人名(如 Rabbit)。目标是按行校正两列内容——确保每行中数值落入 age 列,字符串落入 last_name 列。
核心思路是:对指定两列(['last_name', 'age'])执行逐行字符串化 + 字典序排序 + 反向取值,从而天然实现“数值靠右、文本靠左”的效果(因为数字字符串如 '28'、'36' 在字典序中小于人名字符串如 'Bee'、'Rabbit',排序后数值在前;再通过 [::-1] 反转,即可让数值落到 age 列,文本落到 last_name 列)。
✅ 推荐实现代码:
import pandas as pd
import numpy as np
# 构造原始 DataFrame
df = pd.DataFrame([
['Captain', 'Crunch', 72],
['Trix', 36, 'Rabbit'],
['Count', 'Chocula', 41],
['Tony', 54, 'Tiger'],
['Buzz', 28, 'Bee'],
['Toucan', 'Sam', 38]
], columns=['first_name', 'last_name', 'age'])
# 关键修复:对 last_name 和 age 列按行排序并反转顺序
cols = ['last_name', 'age']
df[cols] = np.sort(df[cols].astype(str).to_numpy(), axis=1)[:, ::-1]
⚠️ 注意事项:
- astype(str) 是必需的,确保数值和字符串可统一比较(否则混合类型排序会报错);
- to_numpy() 将 DataFrame 子集转为 NumPy 数组,启用高效的逐行 axis=1 排序;
- [:, ::-1] 表示对每行结果反转,使排序后较小的字符串(如 '28')移到右侧,匹配 age 列位置;
- 此法假设每行在指定两列中恰好含一个数值和一个字符串;若存在双数值或双字符串,需额外逻辑处理;
- 修改直接作用于原 DataFrame,如需保留原始数据,请先 df.copy()。
最终输出完全符合预期:所有年龄值正确位于 age 列,所有人名字符串归位至 last_name 列,且顺序与原始行严格对应。该方案简洁、向量化、无显式循环,是处理此类错位问题的典型 Pandas+NumPy 协同范式。
grpcio-reflection 无异步支持因其 servicer 继承同步基类、无 AsyncServicer 实现且依赖同步 I/O;异步调用反射需用 grpc.aio.Channel + stub.ServerReflectionInfo 并 await,自研异步服务端须重写方法并缓存 FileDescriptorSet。 Python 的 grpcio 官方库从 1.39 版本起才正式支...
在 LlamaIndex 中调用 aevaluate_queries() 等异步方法时,必须将 await 语句置于 async 函数内部,并通过 asyncio.run() 启动事件循环;直接在模块顶层 await 会导致 SyntaxError,这是 Python 异步语法的硬性限制。 在 llamaindex 中调用 `aevaluate_queries()` 等异步方法时,必须将 `awa...
本文介绍多种优化方法,帮助你在处理大规模数据时高效创建条件列,包括向量化操作、numpy.select、pd.cut 和缓存函数调用等策略,显著减少计算开销并提升可读性与执行速度。 本文介绍多种优化方法,帮助你在处理大规模数据时高效创建条件列,包括向量化操作、`numpy.select`、`pd.cut` 和缓存函数调用等策略,显著减少计算开销并提升可读性与执行速度。 在 Pandas 中为大型 ...
Faiss将向量搜索从O(N)降至近O(log N),通过索引、量化与压缩实现加速;选错索引类型会导致构建失败或结果不准,小规模用IndexFlatL2,中大规模依数据量选IVF或HNSW。 为什么直接用 NumPy 算余弦相似度会变慢 当向量数量超过 10 万,用 sklearn.metrics.pairwise.cosine_similarity 或手写 np.dot + 归一化做全量比对,内...
Aggregate返回单条字典结果,annotate为每条记录添加字段并保持QuerySet可链式操作;分组聚合必须用values()配合annotate,Aggregate不能用于已分组查询。 直接用 Aggregate 做复杂统计报表,大概率会卡在“查不出想要的分组结构”或“多层聚合嵌套报错”上——它本身不处理分组,只做单次聚合计算,真要出报表,得和 values()、annotate() 配...
subprocess.check_output 默认吞掉 stderr 且不暴露,仅当退出码非零才抛异常;需改用 subprocess.run(..., capture_output=True, check=True) 分别获取 stdout 和 stderr。 subprocess.check_output 会吞掉 stderr 吗 会,而且默认情况下完全不暴露 stderr。调用 subpro...
本文详解在 pyvespa 中部署 onnx 模型时常见的路径引用错误,重点说明为何不能在应用包中直接引用宿主机或 docker 卷中的 onnx 文件,并提供可落地的解决方案:将模型文件嵌入 zip 包、正确配置 schema 与 model 定义、确保资源分配充足。 本文详解在 pyvespa 中部署 onnx 模型时常见的路径引用错误,重点说明为何不能在应用包中直接引用宿主机或 docker...
本文详解在 pyvespa 中部署 onnx 模型时常见的路径引用错误,指出应用包内不可使用宿主机或 docker 卷路径,所有模型文件必须打包进应用 zip 并通过相对路径引用,同时提供可运行的 schema 配置与部署实践要点。 本文详解在 pyvespa 中部署 onnx 模型时常见的路径引用错误,指出应用包内不可使用宿主机或 docker 卷路径,所有模型文件必须打包进应用 zip 并通过...
PySAL与geopandas组合是地理感知聚类的务实选择,能尊重地球曲率、构建空间权重、识别空间自相关;sklearn直接对经纬度聚类会因纬度差异导致距离失真,结果不可解释。 PySAL 和 geopandas 的组合,是做真正地理感知聚类(而非简单把经纬度当平面坐标扔进 sklearn.DBSCAN)的务实选择。它能尊重地球曲率、处理空间权重、识别空间自相关——这些恰恰是多数教程跳过、但业务中...
本文讲解如何正确使用 itertools.groupby 按字符串首字母对 pandas series 数据进行分组,重点解决未排序导致分组断裂、键对象不可读等问题,并提供更简洁、健壮的替代方案。 本文讲解如何正确使用 itertools.groupby 按字符串首字母对 pandas series 数据进行分组,重点解决未排序导致分组断裂、键对象不可读等问题,并提供更简洁、健壮的替代方案。 it...