如何通过索引删除Pandas DataFrame行以排除其在柱状图中显示
解决Pandas df.drop()删除行后仍显示在柱状图的问题
我看到你的问题了——调用df.drop([10])删除索引10的"total"行后,那行还是出现在柱状图里对吧?问题的核心在于Pandas的drop()方法默认不会修改原始DataFrame,它只是返回一个删除指定行后的新DataFrame,而你没有把这个新结果保留下来,也没有让修改直接作用在原数据上。
下面给你两种可行的解决方案:
方案1:使用inplace=True参数直接修改原DataFrame
这个参数会让drop()操作直接在原DataFrame上生效,不需要额外赋值:
import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv("https://raw.githubusercontent.com/ryan-j-hope/Shielding-models/master/2020%20Uk%20Population%20By%20Age%20Demographics.csv", encoding='UTF') df.drop([10], inplace=True) # 添加inplace=True,直接修改原df print(df) ag = df["Age Group"] pop = df["Population (%)"] plt.bar(ag, pop) plt.show()
方案2:将删除后的新DataFrame重新赋值给原变量
如果不想修改原数据(或者更习惯这种显式的赋值方式),可以把drop()返回的新对象存回df:
import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv("https://raw.githubusercontent.com/ryan-j-hope/Shielding-models/master/2020%20Uk%20Population%20By%20Age%20Demographics.csv", encoding='UTF') df = df.drop([10]) # 把删除后的新DataFrame重新赋值给df print(df) ag = df["Age Group"] pop = df["Population (%)"] plt.bar(ag, pop) plt.show()
补充说明
Pandas的大多数数据处理方法(比如drop()、filter()、sort_values()等)都是非原地修改的设计,这样可以避免不小心破坏原始数据。所以以后遇到类似操作时,记得要么用inplace=True,要么把结果重新赋值给变量,这样后续的操作才会基于修改后的数据执行。
内容的提问来源于stack exchange,提问作者syn_bio_delta
相关产品推荐
相关产品推荐

