【问题标题】:Why does reindexing a pandas DataFrame give me an empty DataFrame?为什么重新索引 pandas DataFrame 会给我一个空的 DataFrame?
【发布时间】:2021-02-03 14:45:54
【问题描述】:

我有一个包含美国城市信息的数据集,我想给它一个包含州和城市的两级索引。我一直在尝试在类似这样的文档中使用 MultiIndex 方法。

lists = [list(df['state'],list(df['city'])]
tuples = list(zip(*lists))
index = pd.MultiIndex.from_tuples(tuples)
new_df = pd.DataFrame(df,index=index)

输出是一个具有正确索引的新 DataFrame,但它充满了 np.nan 值。知道发生了什么吗?

【问题讨论】:

  • 您提到reindex,但您正在创建一个新的df?也许你想要DataFrame.reindex

标签: python pandas dataframe


【解决方案1】:

当您使用新索引重新索引 DataFrame 时,Pandas 大致运行 方式如下:

  • 迭代当前索引。
  • 检查该索引值是否出现在新索引中。
  • 从“旧”(现有)行中,仅保留具有索引值的行 出现在新索引中。
  • 可以对行进行重新排序,以与新行的顺序保持一致 索引。
  • 如果新索引包含 DataFrame 中不存在的值,则 对应的行只有 NaN 值。

也许您的 DataFrame 最初有一个“标准”索引(一个序列 从 0 开始的整数)? 在这种情况下,新索引中不存在旧索引的项 index(实际上是 MultiIndex),因此生成的 DataFrame 有 所有行都充满了 NaNs。

也许您应该将索引设置为感兴趣的两列, 即运行:

df.set_index(['state', 'city'], inplace=True)

【讨论】:

    猜你喜欢
    • 2013-09-23
    • 2012-10-09
    • 2019-03-21
    • 1970-01-01
    • 2018-04-08
    • 2017-08-07
    • 1970-01-01
    • 2013-11-19
    相关资源
    最近更新 更多