小编Cur*_*ner的帖子

如何在 pandas 多索引数据框中仅选择索引列?

好的,所以我有一个具有 2 列索引的 DataFrame,我试图从该 DataFrame 中过滤行,并仅将原始数据帧的索引列保留到新的过滤后的 DataFrame 中。

我通过以下方式从 CSV 文件创建了数据框:在此处查找 CSV 文件

census_df = pd.read_csv("census.csv", index_col = ["STNAME", "CTYNAME"])
census_df.sort_index(ascending = True)
Run Code Online (Sandbox Code Playgroud)

然后,我对 DataFrame 应用了一些过滤,效果非常好,并且我得到了所需的行。我使用的代码如下所示:

def my_answer():

    mask1 = census_df["REGION"].between(1, 2)
    mask2 = census_df.index.get_level_values("CTYNAME").str.startswith("Washington")
    mask3 = (census_df["POPESTIMATE2015"] > census_df["POPESTIMATE2014"])
    new_df = census_df[mask1 & mask2 & mask3]
    return pd.DataFrame(new_df.iloc[:, -1])

my_answer()
Run Code Online (Sandbox Code Playgroud)

问题是这样的:

上面的代码返回一个数据帧,其中除了 2 个索引列之外,还包含索引和第一列。我想要的只是两个索引列。因此,最终答案应该返回一个数据框,其中包含“STNAME”和“CTYNAME”,其中有 5 行。

multi-index dataframe python-3.x pandas

5
推荐指数
1
解决办法
2万
查看次数

pandas - 为什么我无法使用 Pandas 的“skiprows”参数跳过行

那么,看看下面的代码:

import numpy as np
import pandas as pd

def answer_one():

    energy = pd.read_excel(io = "Energy Indicators.xls", header = 9, parse_cols = "C:F", skip_footer = 38)
    return energy

answer_one()
Run Code Online (Sandbox Code Playgroud)

它产生以下输出:

在此输入图像描述

现在,当我对代码进行一些修改时,如下所示,它完全改变了输出:

def answer_one():

    energy = pd.read_excel(io = "Energy Indicators.xls", header = 9, parse_cols = "C:F", skip_footer = 38, skiprows = 8)
    return energy

answer_one()
Run Code Online (Sandbox Code Playgroud)

我得到的输出如下:

在此输入图像描述

根据我赋予“skiprows”参数的参数,输出会自行更改。我无法理解当我们保持“headers”参数的参数不变时,为什么更改“skiprows”的值会影响数据帧的标题?请在此处找到数据文件(.xlsx 文件)

有什么帮助吗?我使用 Pandas v0.19.2。另外,请不要将我的问题标记为“重复”。我丢分了伙计。我相当努力地试图找到一个现有的问题,但找不到。

python pandas

1
推荐指数
1
解决办法
7876
查看次数

标签 统计

pandas ×2

dataframe ×1

multi-index ×1

python ×1

python-3.x ×1