问题背景:
在用Pandas进行数据分析和处理的时候,常会用到如
goupby(),pivot()
等方法,这些方法极大简化了我们的操作复杂度。但另一方面,这些操作之后返回的类型往往却并不是一个标准的
DataFrame
。具体的现象就是常会出现多出来的一级表头,而当我们想要再进行继续处理时,它的索引方式就发生变化了,不便于我们进一步操作。因此我们希望能够有一种方法将这些返回类型再次变为我们需要的
DataFrame
类型同时保持原有的表头。本文就这一问题进行简单描述。
给定数据(
借用一下这位朋友的数据
):
import pandas as pd
df= pd.DataFrame({'name': ['张三','李四','王五','张三','王五','张三','赵六','张三','赵六'],
'sex': ['男','女','男','男','男','男','女','女','女'],
'expense': [2.9,9.0,8.5,5.6,5.6,5.2,1.2,4.5,3.2],
'income': [5.2,2.5,6.3,5.6,4.5,5.6,1.2,8.5,1.2]
df
的值
name sex expense income
0 张三 男 2.9 5.2
1 李四 女 9.0 2.5
2 王五 男 8.5 6.3
3 张三 男 5.6 5.6
4 王五 男 5.6 4.5
5 张三 男 5.2 5.6
6 赵六 女 1.2 1.2
7 张三 女 4.5 8.5
8 赵六 女 3.2 1.2
现在按性别统计他们的开销:
df_expense = df.groupby(['sex','name'])['expense'].agg(np.mean)
df_expense
sex name
女 张三 4.500000
李四 9.000000
赵六 2.200000
男 张三 4.566667
王五 7.050000
Name: expense, dtype: float64
注意,此时的df_expense
变成了series
,因为这里我们只聚合了一列。而此时的前2列,实际上已经变成了df_expense
的index
df_expense.index
MultiIndex([('女', '张三'),
('女', '李四'),
('女', '赵六'),
('男', '张三'),
('男', '王五')],
names=['sex', 'name'])
那么如果直接使用to_frame()
方法则不能得到我们想要的结果(即sex,name,mean_expense
各为一列):
pd.DataFrame(df_expense)
expense
sex name
女 张三 4.500000
李四 9.000000
赵六 2.200000
男 张三 4.566667
王五 7.050000
因为此时它的index
仍然是刚才那个Series
类型的index
。
还好Pandas
实际上提供了一种机制,即重置索引。其基本原理是将每一列只要是表头的项全部放在一起,作为一个完整的表头名,从而实现将多级表头合并为同一个表头的效果:
df_new = pd.DataFrame(df_expense).reset_index()
df_new
sex name expense
0 女 张三 4.500000
1 女 李四 9.000000
2 女 赵六 2.200000
3 男 张三 4.566667
4 男 王五 7.050000
再检查一下它的表头现在是哪些:
df_new.columns
Index(['sex', 'name', 'expense'], dtype='object')
这样一来,df_new
就又变回了我们想要的DataFrame
类型,就方便我们操作了。
DataFrame俗称数据框,和一般的Excel表格没有多大区别,一般包含索引(行)和表头(列),在python中,由pandas包提供。这是一个最简单的数据框类型,只包含一级索引和一级表头如果你的python还没有这个包,请执行以下命令安装:pip install pandas这一节,我们要处理的主题是:多级表头和多级目录先看看他们长什么样子:表格1:包含二级表头和一级索引表格二:包含二级索引和...
三级表头可以按如下办法设置:
col = [['一级1','一级1','一级1','一级2','一级2','一级2']['二级1','二级1','二级2','二级3','二级3','二级4']['三级1','三级2','三级3','三级4','三级5','三级5']]
data_df = pd.DataFrame(
data = [[xx,xx,xx...],[xxx,xxx,xxx,xxx],[xx,xxx,xxx].....],
columns = col,
index = [1,2
colums = [("1", "1.1"), ("1", "1.2"), ("1", "1.3"), ("2", "2.1"), ("2", "2.2"), ("2", "2.3")]
df.columns = pd.MultiIndex.from_tuples(columns)
这样ok了
pands.dataframe,最近遇到当columns是多行(多个表头)时,存表格时,index=False,报错,查了很多资料,结合了多个网上的记录才弄好,纪录一下。
首先就是如何将dataframe的columns设置成2级表头见代码和生成的表格:
M_F=pd.DataFrame(M_F,columns=[['宜昌天气预测报']*8+['五个分区降雨量(mm)']*5,['起报日期','预报日期','气温(℃)','降水(mm)','风速(m/s)','风向','气压(hPa)',
3 foo two w 4.0
#### 1、set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)
默认情况:
DataFrame.set_inde...
追加的时候,判断文件是否存着,如果不存在则添加表头,否则添加表头
if not os.path.exists('result.csv'):
data.to_csv('result.csv',encoding='utf_8_sig',mode='a',index=
贴上源码 函数_format_regular_rows
def _format_regular_rows(self):
has_aliases = isinstance(self.header, (tuple, list, np.ndarray, Index))
if has_alia...
关于Excel数据处理,很多同学可能使用过Pyhton的pandas模块,用它可以轻松地读取和转换Excel数据。但是实际中Excel表格结构可能比较杂乱,数据会分散不同的工作表中,而且在表格中分布很乱,这种情况下啊直接使用pandas就会非常吃力。本文虫虫给大家介绍使用pandas和openpyxl读取这样的数据的方法。问题缘起pandas read_excel函数在读取Excel工作表方面做得...
发现许多小伙伴入门Python几个月,还是低效率做数据处理。这套课程以形象的示意图,精心安排的案例,循序渐进带你玩转数据处理分析神器——pandas,课程中还有分析案例噢,干货满满!前言上一节我们已经熟悉了 DataFrame 的 index、columns、values 直接的转移,那么这节就有足够的知识快速理解透视与逆透视操作。长表与宽表一份表格数据,可以按照其数据形状划分为2种:长表与宽表。...