使用Pandas计算分位数时输出多余0的原因及解决方法
Pandas分位数输出多余‘0’的原因及解决方法
问题重现
你编写的计算年龄分位数的代码如下:
age_batch=[15,16,20,21,21, 21,21,21,21,21, 21,21,21,21,21, 21,21,21,22,22, 22,22,22,22,22, 23,23,23,23,23, 24,24,24,26,26, 27,27,28,35,56] import pandas as pd data= pd.DataFrame(age_batch) q1=data.quantile(0.25) q2=data.quantile(0.5) q3=data.quantile(0.75) IQR=(q3-q1)/2 print("first quartile is",q1.to_string()) print("second quartile is ", q2.to_string()) print("third quartile is ", q3.to_string()) print("IQR Age is ", IQR.to_string())
运行后输出出现多余的‘0’:
first quartile is 0 21.0 second quartile is 0 22.0 third quartile is 0 23.25 IQR Age is 0 1.125
原因分析
这个‘0’是列索引:因为你把数据存成了DataFrame(即使只有1列),quantile()方法返回的是Series对象,这个Series的索引对应原DataFrame的默认列名(自动分配的0)。调用to_string()时,会把索引和对应的数值一起打印出来,所以出现了多余的‘0’。
解决方法
有两种简单方式可以移除这个多余的‘0’:
方法1:提取Series中的标量值
直接从返回的Series中取出数值,而不是保留整个Series对象。可以用.iloc[0]或者.values[0]提取:
age_batch=[15,16,20,21,21, 21,21,21,21,21, 21,21,21,21,21, 21,21,21,22,22, 22,22,22,22,22, 23,23,23,23,23, 24,24,24,26,26, 27,27,28,35,56] import pandas as pd data= pd.DataFrame(age_batch) # 提取标量值 q1=data.quantile(0.25).iloc[0] q2=data.quantile(0.5).iloc[0] q3=data.quantile(0.75).iloc[0] IQR=(q3-q1)/2 # 直接打印数值,无需to_string() print("first quartile is", q1) print("second quartile is ", q2) print("third quartile is ", q3) print("IQR Age is ", IQR)
方法2:改用Series存储数据
如果你的数据只有一列,直接用pd.Series存储,quantile()会直接返回标量值,无需额外处理:
age_batch=[15,16,20,21,21, 21,21,21,21,21, 21,21,21,21,21, 21,21,21,22,22, 22,22,22,22,22, 23,23,23,23,23, 24,24,24,26,26, 27,27,28,35,56] import pandas as pd # 用Series存储单列数据 data= pd.Series(age_batch) q1=data.quantile(0.25) q2=data.quantile(0.5) q3=data.quantile(0.75) IQR=(q3-q1)/2 print("first quartile is", q1) print("second quartile is ", q2) print("third quartile is ", q3) print("IQR Age is ", IQR)
修改后输出
两种方法运行后都会得到干净的输出:
first quartile is 21.0 second quartile is 22.0 third quartile is 23.25 IQR Age is 1.125
内容的提问来源于stack exchange,提问作者Akhila Joseph
相关产品推荐
相关产品推荐

