首页 > 解决方案 > 是否有修复熊猫索引列中缺失值的标准方法?

问题描述

问题

我正在处理一个数据集,该数据集已作为 csv 文件提供给我,其行格式为id,data. 我想在熊猫数据框中使用这些数据,以 id 作为索引。

不幸的是,在数据管道的某个地方,我的 csv 文件有许多行缺少 id。幸运的是,我的数据行并不是完全独立的,所以我可以重新创建缺失的值:每一行都链接到它的前任,并且我可以访问一个 oracle,当给定一个 id 时,它可以给我它的所有数据。这包括其前身的 id。

因此,我的问题是是否有一种简单的方法可以在我的数据框中填充这些缺失值

我的解决方案

我没有太多使用熊猫的经验,但是在玩了一会儿之后,我想出了以下方法。我首先将 csv 文件读入数据帧而不设置索引,所以我最终得到一个 RangeIndex。我那时

  1. 查找缺少 id 的行的位置
  2. 索引加 1 得到每一行的子节点
  3. 为每个孩子的父母询问神谕
  4. 合并孩子id上的父母和孩子
  5. 再次从索引中减去一个,并设置父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% 确定它会在几个月后看起来像可怕的黑魔法。

特别是,我不满意

有没有人对更好的做事方式有任何建议?

输入数据的格式是固定的,oracle 的属性也是固定的,但是如果有一种更智能的方式来组织我的数据框,我很高兴听到它。

标签: pythonpandasdataframe

解决方案


推荐阅读