一、pandas的数据结构
1、 pandas处理以下三种数据结构
Series:序列,1D标记均匀数组,大小不变
均匀数组
尺寸大小不变
数据的值不可变
DataFrame:数据帧,2D标记,大小可变的表结构与潜在的异质类型的列
异构数据
大小可变
数据可变
Panel:面板,3D标记,大小可变的数组
异构数据
大小可变
数据可变
这些数据结构是建立在numpy数组之上的。
上面三种数据结构中,较高维度的数组是较低维度数组的容器
二、序列的创建
Pandas创建序列需要使用pandas.Series(data,index, dtype, copy)
data :创建Series的数据可以是各种形式的数据,包括list,tuple,dict,ndarray以及其他object等
index:索引值必须是唯一的和散列的,与数据的长度相同,默认为np.arange(n),
dtype :数据类型,如果没有传值,将会自动推断数据类型
copy : 复制数据
创建一个空序列:
1
2
3
4import pandas as pd s = pd.Series() print(s)
从list,tuple,dict,ndarray以及其他object等创建序列
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20import pandas as pd import numpy as np data1 = ['a','b','c','d','e'] data2 = ('a','b','c','d','e') data3 = {'a':1,'b':2,'c':3,'d':4,'e':5} data4 = np.arange(10) index = [1,2,3,4,5] s1 = pd.Series(data=data1,index=index) s2 = pd.Series(data=data2,index=index) s3 = pd.Series(data=data3) s4 = pd.Series(data=data4) print('create for list', s1) print('create for tuple', s2) print('create for dict', s3) print('create for ndarray', s4) print('create for list', s1[1]) print('create for tuple', s2[1]) print('create for dict', s3['a']) print('create for ndarray', s4[1])
字典可以作为输入传递,如果没有指定索引,则按排序顺序取得字典键以构造索引。如果传递了索引,索引与标签对应的数据中的值将会被拉出。
1
2
3
4
5
6import pandas as pd import numpy as np data1 = {'a':1,'b':2,'c':3,'d':4,'e':5} s = pd.Series(data1,index=['c','d','f','a']) print(s)
从一个标量中创建一个序列
1
2
3
4
5import pandas as pd import numpy as np s = pd.Series(5,index=['c','d','f','a']) print(s)
从序列中索引数据,有以下几种方式:
1、 基于切片的方式:包括list,基于冒号的正序和逆序
2、 基于index的方式
基于get的方式(与index的区别,使用index方式时,若基于索引的数据不存在,则会报错,但get方式,若基于索引的数据不存在,会返回none)
1
2
3
4
5
6
7
8import pandas as pd import numpy as np s = pd.Series([1,2,3,4],index=['c','d','f','a']) print(s[:2]) print(s[-3:]) print(s['a']) print('get',s.get('a'))
三、DataFrame创建
DataFrame的特点:
与列表类似,可以标记轴(行和列名)
大小可变
可以对行和列进行算数运算
每一列可以是不同的数据类型
创建DataFrame可以用pandas.DataFrame(data,index, columns, dtype, copy),
data :各种形式的数据,包括ndarray,series,map,list,dict,constant或者DataFrame
index:行标签,与Series一样,没有传值的话,默认为np.arange(n)
columns:列标签,与Series一样,没有传值的话,默认为np.arange(n)
dtype:每一列的数据类型(只对列有效)
copy:默认为False,用此命令用于复制数据
创建一个空的DataFrame
1
2
3
4
5import pandas as pd import numpy as np s = pd.DataFrame() print(s)
创建单列的DataFrame
1
2
3
4
5
6import pandas as pd import numpy as np data = [1,2,3,4,5] s = pd.DataFrame(data) print(s)
创建指定列名的DataFrame
1
2
3
4
5
6import pandas as pd import numpy as np data = [['a',1],['b',2],['c',3],['d',4],['e',5]] s = pd.DataFrame(data,columns=['name','num']) print(s)
从字典中创建DataFrame
1
2
3
4
5
6import pandas as pd import numpy as np data = {'A':['a',1],'B':['b',2],'C':['c',3],'D':['d',4],'E':['e',5]} s = pd.DataFrame(data) print(s)
使用字典来创建DataFrame,是一个很强大的功能,由于字典的特性,字典的每一项的key,在创建成DataFrame时,都会作为DataFrame的列索引,若使用两个不同的dict创建,缺失的值的部分会使用Nan填充;
1
2
3
4
5
6import pandas as pd import numpy as np data = [{'A':['a',1],'B':['b',2],'C':['c',3],'D':['d',4]},{'A':['a',1],'E':['e']}] s = pd.DataFrame(data) print(s)
从series中创建DataFrame
1
2
3
4
5
6import pandas as pd import numpy as np s = pd.Series(['a','b','c','d']) df = pd.DataFrame(s) print(df)
从字典,序列中创建
1
2
3
4
5
6
7
8import pandas as pd import numpy as np s1 = pd.Series(['a','b','c','d']) s2 = pd.Series(['a','b','c','d']) d = {'A':s1,'B':s2} df = pd.DataFrame(d) print(df)
若需要往DataFrame中添加一列数据,可直接对新的一列赋值的方式增加新一列,但新增加的列的长度,不会因为赋值的列的长度变化而变化
1
2
3
4
5
6
7
8
9import pandas as pd import numpy as np s1 = pd.Series(['a','b','c','d']) df = pd.DataFrame(s1,columns=['A']) df['B'] = [1,2,3,4] print(df) df['C'] = pd.Series(['a','b','c','d','e'],index=[0,1,2,3,4]) print(df)
列删除
要删除某一列,有两种方式:
1、 直接del
2、Pop删除
1
2
3
4
5
6
7
8
9
10
11
12
13
14import pandas as pd import numpy as np s1 = pd.Series(['a','b','c','d']) df = pd.DataFrame(s1,columns=['A']) df['B'] = [1,2,3,4] print(df) df['C'] = pd.Series(['a','b','c','d','e'],index=[0,1,2,3,4]) print(df) del df['B'] print(df) a = df.pop('C') print(a) print(df)
上面说的都是列操作,下面说一下行操作
行选择、添加和删除
行选择:
1、 通过行标签索引,需要使用loc
2、 使用行标签的整数行索引,需要使用iloc
3、使用数字切片进行索引
1
2
3
4
5
6
7
8import pandas as pd import numpy as np df = pd.DataFrame([['a','b','c','d'],['f','g','h','i'],['a','b','c','d'],['f','g','h','i']],index=['A','B','C','D'],columns=['A','B','C','D']) print(df) print(df.loc['A']) print(df.iloc[0]) print(df[0:2])
附加行
使用append()函数进行添加,返回添加行后的DataFrame
1
2
3
4
5
6
7
8import pandas as pd import numpy as np df = pd.DataFrame([['a','b','c','d'],['f','g','h','i'],['a','b','c','d'],['f','g','h','i']],index=['A','B','C','D'],columns=['A','B','C','D']) print(df) print('-'*50) df = df.append(df) print(df)
删除行
1
2
3
4
5
6
7
8
9
10
11import pandas as pd import numpy as np df = pd.DataFrame([['a','b','c','d'],['f','g','h','i'],['a','b','c','d'],['f','g','h','i']],index=['A','B','C','D'],columns=['A','B','C','D']) print(df) print('-'*50) df = df.append(df) print(df) print('-'*50) df = df.drop('A') print(df)
四、Panel面板
面板是3D容器的数据,面板有3个轴,这3个轴的分别为:
items :axis 0,每个项目对应与内部包含的DataFrame
major_axis:axis 1 ,为每个DataFrame的行索引
minor_axis:axis 2,没每个DataFrame的列索引
创建panel,可使用pandas.Panel(data,items, major_axis, minor_axis, dtype, copy)
创建一个Panel1
2
3
4
5
6import pandas as pd import numpy as np pl = pd.Panel([[['a','b','c','d'],['f','g','h','i']],[['a','b','c','d'],['f','g','h','i']]],items=['item1','item2']) print(pl) print(pl['item1'])
最后
以上就是简单小天鹅最近收集整理的关于Pandas - 知识点总结(一)的全部内容,更多相关Pandas内容请搜索靠谱客的其他文章。
发表评论 取消回复