请注意,第一列中缺少某些条目:在多重索引表示中,任何空白条目都表示与其上方的行相同的值。...作为额外维度的MultiIndex 你可能会注意到其他内容:我们可以使用带有索引和列标签的简单DataFrame,来轻松存储相同的数据。事实上,Pandas 的构建具有这种等价关系。...列的MultiIndex 在DataFrame中,行和列是完全对称的,就像行可以有多个索引层次一样,列也可以有多个层次。...重排分层数据的另一种方法是将索引标签转换为列;这可以通过reset_index方法完成。...,原始输入数据看起来像这样,从列值构建MultiIndex会有用。
MultiIndex 剖析 MultiIndex 对于没有听说过Pandas的人来说,MultiIndex最直接的用法是使用第二个索引列作为第一个索引列的补充,可以更加独特地识别每一行。...这个方法无法同时过滤行和列,所以名字xs(代表 "cross-section")背后的原因并不完全清楚。它不能用于设置值。...这意味着你不能用它来实现df[:, 'population'],而不需要转置DataFrame(除非所有列都是相同的类型,否则会丢失类型)。...将MultiIndex转换为flat的索引并将其恢复 方便的查询方法只解决了处理行中MultiIndex的复杂性。...一种方法是将所有不相关的列索引层层叠加到行索引中,进行必要的计算,然后再将它们解叠回来(使用pdi.lock来保持原来的列顺序)。
explode():将类似列表的值的列转换为单独的行。 crosstab():计算多个一维因子数组的交叉制表。 cut():将连续变量转换为离散的分类值。...具有多个未用作列或索引输入的值列,则生成的“透视”DataFrame将具有分层列,其最顶层指示相应的值列: In [5]: df["value2"] = df["value"] * 2 In [6]:...“压缩”为以下之一: 在列中具有Index的情况下的Series。...、类似列表的值的`DataFrame`列,`explode()` 将每个类似列表的值转换为单独的行。...、类似列表的值的 DataFrame 列,explode() 将每个类似列表的值转换为单独的行。
多层索引由levels和codes构成。 注: 1 这里多维索引的levels是元组的元素的值。 2 这里多维索引的codes是对元组元素进行的编码,如0,1,2等。...它的特点是同层(维)的索引值会重复。...#通过xs对多层索引对象的索引和列分别访问。...#通过DataFrame的T方法对原有的多层索引进行转置,即原有的列为索引,索引合并为列。...#指定索引序号,通过unstack将该索引转换为列。
切片与索引 获取单个元素 >>> a[2] # 选择第二个索引处的元素 3 >>> b[1,2] # 选择第1行第2列的元素(相当于b[1][2]) 1.5 2 3 6.0 456 获取子集...>>> a[0:2] # 选择索引0和1的项 array([1, 2]) >>> b[0:2,1] # 选择第1列中第0行和第1行中的项目 array([ 2., 5.]) >>> b[:1] #...Stack: 将数据的列索引转换为行索引(列索引可以简单理解为列名) Unstack: 将数据的行索引转换为列索引 >>> stacked = df5.stack() >>> stacked.unstack...col_level : 如果列是MultiIndex,则使用此级别。 宽数据--->>长数据,有点像用excel做透视跟逆透视的过程。...索引选择 >>> df[(df.Country.isin(df2.Type))] # 找到相同的元素 >>> df3.filter(items=["a","b"]) # 过滤值 >>> df.select
这里还要注意一点:由于type列对应了不同的空气质量要素,而不同的空气质量要素具有不同的取值范围,因此在使用describe查看统计信息时,应针对不同的要素进行,这样才有具体意义,才能看出每个要素的值分布...# data.loc[0:5, '1001A':'1005A] # 会出错 ⚠️ 由于行索引已经转换为时间,因此此处不能使用 整数 索引。...: .apply 上面在创建时间索引时便利用了.apply 方法,对date 和 hour列分别进行了数据类型的转换,然后将两个字符串进行了连接,转换为时间。...索引切片: 可以理解成 idx 将 MultiIndex 视为一个新的 DataFrame,然后将上层索引视为行,下层索引视为列,以此来进行数据的查询。...上述操作返回的列仍然是 MultiIndex,因为此时只有一个站点了,我们可以使用 .xs 方法将列从MultiIndex转换为Index。
如果我们使用 Pandas 的 read_csv() 方法读取 csv 文件而不指定任何索引,则生成的 DataFrame 将具有默认的基于整数的索引,第一行从 0 开始,随后每行增加 1: import...DataFrame 索引,并将旧索引转换为与旧索引同名的新列(或名称索引)。...() 方法将 DataFrame 索引重置为默认数字索引,在以下情况下特别有用: 执行数据整理时——尤其是过滤数据或删除缺失值等预处理操作,会导致较小的 DataFrame 具有不再连续的数字索引 当索引应该被视为一个常见的...DataFrame 列,而索引被重置为默认的基于整数的索引 相反,如果我们显式传递 level 的值,则此参数会从 DataFrame 索引中删除选定的级别,并将它们作为常见的 DataFrame 列返回...,但是由于我们没有显式传递 drop 参数,旧索引被转换为列,具有默认名称 index,下面让我们从 DataFrame 中完全删除旧索引: df.reset_index(drop=True) Output
,根据条件来筛选行是极其常见的,此处传入 loc 的布尔列表与 DataFrame 长度相同,且列表为 True 的位置所对应的行会被选中, False 则会被剔除。...,必须以前面的四种合法形式之一为返回值,并且函数的输入值为 DataFrame 本身。...与单层索引的表一样,具备元素值、行索引和列索引三个部分。其中,这里的行索引和列索引都是 MultiIndex 类型,只不过 索引中的一个元素是元组 而不是单层索引中的标量。...例如,行索引的第四个元素为 ("B", "Male") ,列索引的第二个元素为 ("Height", "Senior") ,这里需要注意,外层连续出现相同的值时,第一次之后出现的会被隐藏显示,使结果的可读性增强...与单层索引类似, MultiIndex 也具有名字属性,图中的 School 和 Gender 分别对应了表的第一层和第二层行索引的名字, Indicator 和 Grade 分别对应了第一层和第二层列索引的名字
这会将行转换为 Series 对象,这可能会改变 dtypes 并具有一些性能影响。 itertuples():将 DataFrame 的行作为命名元组的值进行迭代。...元组的第一个元素将是行的相应索引值,而其余值是行值。...元组的第一个元素将是行的相应索引值,而其余值是行值。...Series 并应返回具有相同形状的转换值的 Series 或数组。...,并应返回一个形状相同的 Series 或数组,带有转换后的值。
加法: 对应位置相加 乘法: 标量和每个位置的元素相乘 3.矩阵向量(矩阵)乘法[*****] [M行, N列]*[N行, L列] = [M行, L列]...那么A和B就互为逆矩阵 7.转置 行列互换 4.6 数组间运算[*] 1.数组和数字是直接可以进行运算 2.数组和数组 需要满足广播机制...() 3.设置新索引 对象.set_index() 如果设置索引是两个的时候就是multiIndex 4....MultiIndex和panel -- 类比三维数组[**] 1.MultiIndex 对象.index 对象.index.names...2.panel -- 已经弃用,了解 直接没法进行查看里面的值,需要通过索引获取 对象[:, :, ""] 5.Series -- 一维数组[*
比如,下面这个数据是高考录取分数线,行索引是地区、学校,列索引是年份、专业,分别对应1级和2级索引,因此共有四个维度。 1、多层级索引创建 多级索引的创建分两种情况。...# 数组 # 每个数组对应着一个层级的索引值 arrays = [['北京','北京','上海','上海'],['北大','清华','上交','复旦']] mindex = pd.MultiIndex.from_arrays...= pd.MultiIndex.from_frame(frame, names=['城市','大学']) # 给df行索引赋值 df.index = mindex 通过以上三种方式均可为数据添加行索引值...这种方式生成的索引和我们上面想要的形式不同,因此对行索引不适用,但是我们发现列索引column目前还没指定,此时是默认的1,2,3,4,进一步发现这里的列索引是符合笛卡尔积形式的,因此我们用from_product...set_index(['城市','大学','专业','年份']).unstack().unstack() 以上两种方式结果相同,均可从原数据中抽取列维度数据并设置为行列的多级索引。
pivot pivot函数用于从给定的表中创建出新的派生表 pivot有三个参数: 索引 列 值 def pivot_simple(index, columns, values): """...columns values : ndarray Values to use for populating new frame's values pivot函数将创建一个新表,其行和列索引是相应参数的唯一值...因此,必须确保我们指定的列和行没有重复的数据,才可以用pivot函数 pivot_table方法实现了类似pivot方法的功能 它可以在指定的列和行有重复的情况下使用 我们可以使用均值、中值或其他的聚合函数来计算重复条目中的单个值...,它允许在数据集中聚合具有相同目标的多个值。...堆叠DataFrame意味着移动最里面的列索引成为最里面的行索引,反向操作称之为取消堆叠,意味着将最里面的行索引移动为最里面的列索引。
等宽法 等宽法将属性的值域从最小值到最大值划分成具有相同宽度的区间,具体划分多少个区间由数据本身的特点决定,或者由具有业务经验的用户指定 等频法 等频法将相同数量的值划分到每个区间,保证每个区间的数量基本一致...基于列值重塑数据(生成一个“透视”表)。使用来自指定索引/列的唯一值来形成结果DataFrame的轴。此函数不支持数据聚合,多个值将导致列中的MultiIndex。...,商品一列的唯一数据变换为列索引: # 将出售日期一列的唯一数据变换为行索引,商品一列的唯一数据变换为列索引 new_df = df_obj.pivot(index='出售日期', columns='商品名称...',values='价格(元)') new_df 输出为: 2.2.2 melt方法 melt()是pivot()的逆操作方法,用于将DataFrame类对象的列索引转换为一行数据。...示例代码如下: 查看初始数据 new_df 输出为: # 将列索引转换为一行数据: # 将列索引转换为一行数据 new_df.melt(value_name='价格(元)', ignore_index
DataFrame数据结构的构成 DataFrame数据是Pandas中的基本数据结构,同时具有行索引(index)和列索引(columns),看起来与Excel表格相似。 ?...设置某一列为行索引 上面的DataFrame数据中,行索引是0~4725的整数,假如要设置日期为行索引,可以使用set_index()方法设置。...将日期设置为行索引后,“日期”这一列数据变成了索引,数据中就不再有日期了。可见,set_index()移动了列的位置,从数据移动到了行索引(但没有删除数据)。...设置多重索引MultiIndex 使用set_index()设置行索引时可以同时设置多个列为行索引。...可以看到,当同时设置“日期”和“股票代码”为行索引后,打印行索引的结果是MultiIndex(多重索引),而前面打印原始数据的行索引为Index。
pandas系列10-数值操作2 本文是书《对比Excel,轻松学习Python数据分析》的第二篇,主要内容包含 区间切分 插入数据(行或列) 转置 索引重塑 长宽表转换 区间切分 Excel Excel...Python pandas中的转置只需要调用.T方法即可 ? 索引重塑 所谓的索引重塑就是将原来的索引重新进行构造。两种常见的表示数据的结构: 表格型 树形 下面?...是表格型的示意图,通过一个行坐标和列坐标来确定一个数据 ? 下面?是树形的结构示意图:将原来表格型的列索引也变成了行索引,其实就是给表格型数据建立层次化索引 ?...在转换的过程中,宽表和长表中必须要有相同的列。比如将下图的宽表转成长表 宽表: ? 长表: ? 实现过程 stack方法 ? ?...company和name是行索引 Year是列属性 Sale是值
为了使其发挥作用,这两个DataFrame需要有(大致)相同的列。这与NumPy中的vstack类似,你如下图所示: 在索引中出现重复的值是不好的,会遇到各种各样的问题。...通过MultiIndex进行堆叠 如果行和列的标签都重合,concat可以做一个相当于垂直堆叠的MultiIndex(像NumPy的dstack): 如果行和/或列部分重叠,Pandas将相应地对齐名称...注意:要小心,如果第二个表有重复的索引值,你会在结果中出现重复的索引值,即使左表的索引是唯一的 有时,连接的DataFrame有相同名称的列。...要将其转换为宽格式,请使用df.pivot: 这条命令抛弃了与操作无关的东西(即索引和价格列),并将所要求的三列信息转换为长格式,将客户名称放入结果的索引中,将产品名称放入其列中,将销售数量放入其 "...它将索引和列合并到MultiIndex中: eset_index 如果你想只stack某些列,你可以使用melt: 请注意,熔体以不同的方式排列结果的行。
(index=list(df.index)[::5]) 为index传入的参数可以不是df的原始index中的值---这将引入缺失值构成的行,还可以传入重复索引。...由于df_temp中没有1105这个行索引,因此会引入缺失值。...df_temp1.rename_axis(index={'Upper':'UPPER'}) rename方法用于修改列或者行索引标签,而不是索引名 给index传入的字典,键是原来的索引值, 值是新的索引值...无需指定要修改的索引级别,会自动寻找索引中的相应的值----当不同层级的索引有相同的值的时候,这会造成混乱。...df_t.rename(index={'A':'T'},level=1,columns={'E':'changed_e'},level=0).head() # 显然不能同时指定两个level 一个问题:如果不同层级的索引的索引值有相同的值的时候
解析具有混合时区的 CSV pandas 无法原生表示具有混合时区的列或索引。...sparsify 默认为 True,设置为 False 以在具有分层索引的 DataFrame 中打印每个行的每个 MultiIndex 键。...,因此具有被转换为 UTC 的相同行为。...转换是逐个单元格应用的,而不是整个列,因此不能保证数组 dtype。例如,具有缺失值的整数列无法转换为具有整数 dtype 的数组,因为 NaN 严格是浮点数。...在概念上,`table`的形状非常类似于 DataFrame,具有行和列。`table`可以在相同或其他会话中追加。此外,支持删除和查询类型操作。
,每列可以是不用的类型,数值、字符串、布尔值都可以 DataFrame 本身也有行索引,列索引,字典转 DataFrame 再转置表格才一致。...①字典转为DF类型后,键/key 也默认成为了列索引,与排序不谋而合, ②目前学到的只有列转置,可以用学过的转置,再排序。...(index) #将前面创建的pop的索引重置(reindex)为MultiIndex,就会看到层级索引,结果是单索引的数组 #其中,前两列表示Series的多级索引值,第三列是数据。...第一列中的每个空格与上面的索引相同,这是多级索引的表现形式。...文件得到的DF 原本缺少行索引,下面指定 c3这一列 成为指定行索引。
领取专属 10元无门槛券
手把手带您无忧上云