python - 是否有修复熊猫索引列中缺失值的标准方法?
问题描述
问题
我正在处理一个数据集,该数据集已作为 csv 文件提供给我,其行格式为id,data
. 我想在熊猫数据框中使用这些数据,以 id 作为索引。
不幸的是,在数据管道的某个地方,我的 csv 文件有许多行缺少 id。幸运的是,我的数据行并不是完全独立的,所以我可以重新创建缺失的值:每一行都链接到它的前任,并且我可以访问一个 oracle,当给定一个 id 时,它可以给我它的所有数据。这包括其前身的 id。
因此,我的问题是是否有一种简单的方法可以在我的数据框中填充这些缺失值
我的解决方案
我没有太多使用熊猫的经验,但是在玩了一会儿之后,我想出了以下方法。我首先将 csv 文件读入数据帧而不设置索引,所以我最终得到一个 RangeIndex。我那时
- 查找缺少 id 的行的位置
- 索引加 1 得到每一行的子节点
- 为每个孩子的父母询问神谕
- 合并孩子id上的父母和孩子
- 再次从索引中减去一个,并设置父ID
在代码中:
children = df.loc[df[df['id'].isna()].index + 1, 'id']
parents = pd.Series({x.id: x.parent_id for x in ask_oracle(children)},
name='parent_id')
combined = pd.merge(children, parents, left_on='id', right_index=True)
combined.set_index(combined.index - 1, inplace=True)
df.loc[combined.index, 'id'] = combined['parent_id']
这行得通,但我 95% 确定它会在几个月后看起来像可怕的黑魔法。
特别是,我不满意
- 我获取 nan 行位置的方式。
df[
一行三个太多太多了 - 我必须手动摆弄索引才能使行匹配。
有没有人对更好的做事方式有任何建议?
输入数据的格式是固定的,oracle 的属性也是固定的,但是如果有一种更智能的方式来组织我的数据框,我很高兴听到它。
解决方案
推荐阅读
- amazon-web-services - 无法使用 Amazon Linux 2 在 Lightsail 实例中安装 CodeDeploy
- angular - 如何在打字稿中从cdn脚本执行函数
- javascript - react-navigation 导航钩子类型
- angular - 单击Angular更改项目的颜色
- firebase - 在 Firebase 中检索 API 密钥
- google-apps-script - 通过勾选复选框自动移动 Google 表单响应
- c++ - 当缓存线大小通常为 64 字节时,为什么 sizeof std::mutex == 40
- python - python re.split 与 maxsplit 参数
- python - 使用 OpenCV 获得完整的形状图案
- github - “Package.json - 没有这样的文件或目录”错误检查 GitHub 上的詹金斯管道