Pandas | 您所在的位置:网站首页 › 用于从数据源中获取只读的数据的对象是什么 › Pandas |
Series和DataFrame是Pandas中最常用的两个对象,除了这两个,还有Index对象、MultiINdex对象等。 目录 一、Series对象二、DataFrame对象(一)DataFrame的组成元素(二)将其他格式数据转换为DataFrame对象(三)将DataFrame对象转换为其他格式的数据 三、Index对象四、MultiIndex对象(一)创建MultiIndex对象(二)多级索引行列变换(三)多级索引数据存取 五、常用的函数参数 一、Series对象Series是Pandas中最基本的对象。实际上每个Series都由两个数组组成: index 它是从ndarray数组继承的Index索引对象,保存标签信息。若创建Series对象时不指定index,将自动创建一个表示位置下标的索引values 保存元素值的ndarray数组,NumPy的函数都对此数组进行处理 # 不指定index s = pd.Series([1, 2, 3, 4, 5]) print(s) print('-'*20) print(" 索引:", s.index) print("值数组:", s.values)
Series对象支持多种方式存取元素: # 位置下标存取元素 s = pd.Series([1, 2, 3, 4, 5], index=["a", "b", "c", "d", "e"]) print(s) print('-'*20) print("位置下标 s[2]:", s[2])
标签切片同时包括起始标签和结束标签 # 位置列表存取元素 s = pd.Series([1, 2, 3, 4, 5], index=["a", "b", "c", "d", "e"]) print(s) print('-'*20) print("位置列表 s[[1,3,2]]:\n", s[[1,3,2]])
DataFrame对象是Pandas中最常用的数据对象。Pandas提供了将许多数据结构转换为DataFrame对象的方法,还提供了许多输入输出函数来将各种文件格式转换成DataFrame对象。 (一)DataFrame的组成元素
与数组类似,通过shape属性可以得到DataFrame的行数和列数 df.shapeDataFrame对象拥有行索引和列索引,可以通过索引标签对其中的数据进行存取。 index属性保存行索引,columns属性保存列索引。且均为Index对象(后续会提到Index对象) print(df) print('') print(df.columns) print('') print(df.index)[]运算符可以通过列索引标签获取指定的列。 当下标是单个标签时,所得到的是Series对象;当下标是列表时,则得到一个新的DataFrame对象 # 下标是单个标签 print(df['apples']) print('') # 下标是列表 print(df[['apples','oranges']]).loc[]可以通过行索引标签获取指定的行。 同样,当结果是一行时得到的是Series对象,为多行的时候得到的是DataFrame对象。 后续会详细介绍这个。 print(df.loc['Lily']) print('') print(df.loc[['Lily','David']])可以通过from_开头的类方法,将特定格式的数据转换成DataFrame对象。 from_dict()将字典转换为DataFrame对象,其orient参数可以指定字典键对应的方向,默认为columns。 表示把字典的键转换为列索引。当orient参数为index时,字典中的每个值与一行对应。 当字典为嵌套字典时,另一个轴的索引值由第二层字典中的键决定(缺失的数据以NaN表示)。 dict1 = {"a":[1, 2, 3], "b":[4, 5, 6]} dict2 = {"a":{"A":1, "B":2}, "b":{"A":3, "C":4}} df1 = pd.DataFrame.from_dict(dict1, orient="index") df2 = pd.DataFrame.from_dict(dict1, orient="columns") df3 = pd.DataFrame.from_dict(dict2, orient="index") df4 = pd.DataFrame.from_dict(dict2, orient="columns") print(df1) print('') print(df2) print('') print(df3) print('') print(df4)to_dict()是将DataFrame对象转换为字典,它的orient参数决定字典元素的类型 dict1 = {"a":[1, 2, 3], "b":[4, 5, 6]} df2 = pd.DataFrame.from_dict(dict1, orient="columns") print(df2) print('') print(df2.to_dict(orient="records")) #字典列表 print('') print(df2.to_dict(orient="list")) #列表字典 print('') print(df2.to_dict(orient="dict")) #嵌套字典to_records()方法可以将DataFrame对象转换为结构数组,若其index参数为True,则其返回的数组中包含行索引数据 print(df2.to_records().dtype) print('') print(df2.to_records(index=False).dtype)Index对象保存索引标签数据,它可以快速找到标签对应的整数下标,其values属性可以获得保存标签的数组。 data = { 'apples':[3,2,0,1], 'oranges':[0,1,2,3], 'bananas':[1,2,1,0] } df = pd.DataFrame(data, index = ['June','Robert','Lily','David']) index = df.columns print(index.values)Index对象可当做一维数组,通过与NumPy数组相同的下表操作可以得到一个新的Index对象。 但是Index对象是只读的,因此一旦创建就无法修改其中的元素 Index对象也具有字典的映射功能,它将数组中的值映射到其位置 Index.get_loc(value):获取单个value的下标Index.get)indexer(values):获取一组values的下标(若不存在返回-1) print(index.get_loc('oranges')) print('') print(index.get_indexer(['oranges', 'apples', 'nothing']))可以直接调用Index()来创建Index对象,然后传递给DataFrame()的index或columns。 要注意的是:Index是不可变对象,所以多个数据对象的索引可以是同一个Index对象 index = pd.Index(["A", "B", "C", "D", "E"], name="level") print(index) print('') s1 = pd.Series([1, 2, 3, 4, 5], index=index) print(s1) print('') df1 = pd.DataFrame({"a":[1, 2, 3, 4, 5], "b":[6, 7, 8, 9, 10]}, index=index) print(df1) print('') print(s1.index is df1.index)MultiIndex表示多级索引,它从Index继承,其中的多级标签采用元组对象来表示。 有以下4种创建MultiIndex的方法: pandas.MultiIndex.from_arrays :从数组创建pandas.MultiIndex.from_product:从笛卡尔积创建pandas.MultiIndex.from_tuples :从元组创建pandas.MultiIndex.from_frame :另外DataFrame对象创建 # 从数组创建 class1 = ["A", "A", "B", "B"] class2 = ["x", "y", "x", "y"] print(pd.MultiIndex.from_arrays([class1, class2], names=["class1", "class2"]))1.unstack()方法可以快速将一个多级索引的Series转换为普通索引的DataFrame keys=[('June', 'apples'),('June','oranges'),('June','bananas'), ('Robert', 'apples'),('Robert','oranges'),('Robert','bananas'), ('Lily', 'apples'),('Lily','oranges'),('Lily','bananas'), ('David', 'apples'),('David','oranges'),('David','bananas')] index = pd.MultiIndex.from_tuples(keys, names=['names', 'fruits']) data = [3,0,1, 2,1,2, 0,2,1, 1,3,0] s = pd.Series(data, index = index) print(s)
2.stack()方法可以将一个普通索引的DataFrame转换为多级索引的Series data = { 'apples':[3,2,0,1], 'oranges':[0,1,2,3], 'bananas':[1,2,1,0] } df = pd.DataFrame(data, index = ['June','Robert','Lily','David']) print(df) print('-'*40) df1 = df.stack() print(df1)
多级索引数据存取可以使用[],也可以使用loc等存取器 print(s) print('-'*40) print(s[:,'apples']) print('-'*40) print(s.loc[:,'apples']) |
CopyRight 2018-2019 实验室设备网 版权所有 |