Python Pandas格式化列问题:为均值结果添加表头并移除dtype行
问题解答:为均值结果添加表头并移除dtype信息
首先来说第一个问题:为什么df2.columns = ['Questions', 'Mean']没有生效?
你调用df1.mean()后得到的df2其实是一个Pandas Series(一维数据结构),而不是DataFrame。Series只有一个行索引(这里就是各个Question的名称)和对应的值,它根本没有columns这个属性——所以你设置列名的代码相当于在操作一个不存在的属性,自然不会有任何效果。
接下来是第二个问题:怎么移除打印时的dtype: float64行?
这行是Series默认打印输出的一部分,用来告诉你这个Series里的数据类型。要去掉它,最直接的办法就是把Series转换成DataFrame,因为DataFrame的打印格式不会包含这行信息,同时还能帮你实现添加表头的需求。
修改后的代码
这里给你两种可行的修改方式,选哪种都可以:
方式一:用reset_index()转换
import pandas as pd def logic_one(grades): df1 = pd.read_csv(grades) del df1['Student ID'] # 计算均值后,把Series转成带索引列的DataFrame df2 = df1.mean().reset_index() # 给两列设置名称 df2.columns = ['Questions', 'Mean'] print(df2)
方式二:用to_frame()直接转换
import pandas as pd def logic_one(grades): df1 = pd.read_csv(grades) del df1['Student ID'] # 把均值Series直接转成DataFrame,并指定值列的名称 df2 = df1.mean().to_frame(name='Mean').reset_index() # 把原索引列重命名为Questions df2.rename(columns={'index': 'Questions'}, inplace=True) print(df2)
运行后的正确输出
基于你提供的CSV样本,运行后会得到这样的输出:
Questions Mean 0 Question 1 7.333333 1 Question 2 8.500000 2 Question 3 7.333333 3 Question 4 8.166667 4 Question 5 4.833333 5 Question 6 7.666667
这样既成功添加了Questions和Mean的表头,也不会再出现dtype: float64那行了。
内容的提问来源于stack exchange,提问作者TC1111
相关产品推荐
相关产品推荐

