微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pandas入门

一、pandas的定义

基于numpy的数据结构,主要有一维数组Series和二维数组DataFrame两种结构

二、Series的基本概念

 1 import numpy as np
 2 import pandas as pd
 3 
 4 s = pd.Series(np.random.rand(5))
 5 print(s)
 6 print(type(s))
 7 # 是一个带有标签的一维数组,可以保存任何的数据类型(整数,字符串,浮点数,Python对象),轴标签,成为索引 index
 8 print(s.index)
 9 print(s.values, type(s.values))
10 # series相比Ndarry,就是自带一个索引 一维数组 + 对应的索引
11 # series 更像一个有顺序的字典
View Code

三、Series的创建

3.1 由数组(一维数组)和列表创建

1 arr = np.random.randn(5)
2 s = pd.Series(arr)
3 print(s)
4 # index 认使用整数
5 s = pd.Series(arr, index=list('abcde'))
6 pd.Series([1,2,3,4,5], index=list('abcde'), dtype=np.float64)
View Code

3.2 由字典创建,字典的key就是index,values就是values

1 dic = {'a':1, 'b': 2, 'c':'a'}
2 s = pd.Series(dic)
3 print(s)
View Code

3.3 由标量创建

1 s = pd.Series(10, index=list('abcde'))
2 s
3 # 如果由标量创建,必须提供index,来匹配长度
View Code

3.4 名称属性

1 s = pd.Series(10, index=list('abcde'), name='ten')
2 s.name
3 s.rename #重命名
View Code

四、Series的索引和切片

4.1 位置下标,跟序列差不多

1 s = pd.Series(np.random.rand(5))
2 print(s)
3 print(s[0], type(s[0]))
4 s[[1,4]]
View Code

4.2 标签索引,相当于字典

1 s = pd.Series(np.random.rand(5),index=list('abcde'))
2 print(s)
3 print(s['a'], type(s['a']), s['a'].dtype)
4 # 选择多个[[]]  返回的是新的Series对象
5 s[['a', 'd']]
View Code

4.3 切片

1 s1 = pd.Series(np.random.rand(5))
2 s2 = pd.Series(np.random.rand(5), index=list('abcde'))
3 print(s1[1:4])
4 print(s2['a':'c'])
5 # 注意:用标签索引切片,闭区间  字符串索引,
6 # 切片的写法和list一致
7 s2[::2]
View Code

4.4 布尔型索引

1 s = pd.Series(np.arange(10))
2 s[4] = None
3 bs1 = s>5
4 bs2 = s.isnull()
5 bs3 = s.notnull()
6 bs3
7 # 数组做判断之后,返回的是一个由布尔值组成的新的数组
8 s[bs3]
View Code

五、Series的常用操作

5.1 数据查看

1 s = pd.Series(np.random.rand(50))
2 s.head(10) #查看头部前10个数据
3 s.tail(10) #查看尾部后10个数据
View Code

5.2 数据重新索引

 1 s = pd.Series(np.random.rand(5), index=list('abcde'))
 2 s.reindex(['c', 'd', 'a', 'd', 'ab'])
 3 # .reindex 根据索引重新排序,如果索引不存在 ,引入缺失值
 4 # 返回新的序列
 5 # fill_value 填充缺失值
 6 print(s)
 7 print('********')
 8 print(s.reindex(['c', 'd', 'a','a', 'd', 'ab'], fill_value=0))
 9 print('********')
10 print(s)
View Code

5.3 数据对齐

1 s1 = pd.Series(np.random.rand(3), index = ['Jack','Marry','Tom'])
2 s2 = pd.Series(np.random.rand(3), index = ['Wang','Jack','Marry'])
3 print(s1)
4 print(s2)
5 print(s1 + s2)
6 # 会根据index 自动对齐
7 # index顺序不影响
8 # NaN和任何值进行计算都是NaN
View Code

5.4 数据删除

1 s = pd.Series(np.random.rand(5), index=list('abcde'))
2 
3 s.drop('c')
4 # drop 认返回一个删除了指定数据的新的series
5 s.drop(['a','c'])
6 #s.drop('c', inplace=True)
7 #s
8 # inplace=True时,drop不会返回新的序列,会直接改变原数据
9 # inplace 认等于False
View Code

5.5 数据添加

1 s = pd.Series(np.random.rand(5), index=list('abcde'))
2 s2 = pd.Series(np.random.rand(5))
3 s['f'] = 100
4 s2[5] = 100
5 s2
6 # .append方法,直接添加一个数组
7 s1=s.append(s2)
8 s1
9 # .append()返回一个新的series, 不改变原数据
View Code

5.6 数据修改

1 s = pd.Series(np.random.rand(5), index=list('abcde'))
2 print(s)
3 s['a'] = 100
4 print(s)
5 # 直接通过索引赋值,类似列表
View Code

六、DataFrame的基本概念和创建

6.1 基本概念

二维数组,是一个表个型的数据结构,包含了有序的列,其列的值可以是字符串,数值,布尔值等,带有标签的二维数组。

 1 data = {'name':['Jack','Tom','Mary'],
 2         'age':[18,19,20],
 3        'gender':['m','m','w']}
 4 frame = pd.DataFrame(data)
 5 print(frame)
 6 # 二维数组,是一个表个型的数据结构,包含了有序的列,其列的值可以是字符串,数值,布尔值等
 7 # 带有标签的二维数组
 8 print(frame.index) #数据的索引
 9 print(frame.columns) #数据的列标签
10 print(frame.values, type(frame.values)) #数据的值
View Code

6.2 DataFrame的创建

6.2.1 由数组/list组成的字典创建

1 data = {'name':['Jack','Tom','Mary'],
2         'age':[18,19,20],
3        'gender':['m','m','w']}
4 frame = pd.DataFrame(data,index=['Jack', 'Tom', 'Mary'], columns=['age', 'name', 'gender', 'height'])
5 #  一个键值对 ,是一列,所以值的长度要一致
6 print(frame)
7 # 指定columns参数重新排序,格式list,如果没有该列,用NaN填充
8 #  指定index 重新定义行索引,格式list,长度一致
View Code

6.2.2 由Series组成的字典创建

 1 data1 = {'one':pd.Series(np.random.rand(2)),
 2         'two':pd.Series(np.random.rand(3))}  # 没有设置index的Series
 3 data2 = {'one':pd.Series(np.random.rand(2), index = ['a','b']),
 4         'two':pd.Series(np.random.rand(3),index = ['a','b','c'])}  # 设置了index的Series
 5 print(data1)
 6 #print(data2)
 7 df1 = pd.DataFrame(data1)
 8 df2 = pd.DataFrame(data2)
 9 print(df1)
10 print(df2)
11 # 由Seris组成的字典 创建Dataframe,columns为字典key,index为Series的标签(如果Series没有指定标签,则是认数字标签)
12 # Series可以长度不一样,生成的Dataframe会出现NaN值
View Code

6.2.3 通过二维数组直接创建

1 ar = np.random.rand(9).reshape(3,3)
2 print(ar)
3 df1 = pd.DataFrame(ar)
4 df2 = pd.DataFrame(ar, index = ['a', 'b', 'c'], columns = ['one','two','three'])  # 可以尝试一下index或columns长度不等于已有数组的情况
5 print(df1)
6 print(df2)
7 # 通过二维数组直接创建Dataframe,得到一样形状的结果数据,如果不指定index和columns,两者均返回认数字格式
8 # index和colunms指定长度与原数组保持一致
View Code

6.2.4 由字典组成的列表创建

 1 data = [{'one': 1, 'two': 2}, {'one': 5, 'two': 10, 'three': 20}]
 2 print(data)
 3 df1 = pd.DataFrame(data)
 4 df2 = pd.DataFrame(data, index = ['a','b'])
 5 df3 = pd.DataFrame(data, columns = ['one','two'])
 6 print(df1)
 7 print(df2)
 8 print(df3)
 9 # 由字典组成的列表创建Dataframe,columns为字典的key,index不做指定则为认数组标签
10 # colunms和index参数分别重新指定相应列及行标签
View Code

6.2.5 由字典组成的字典创建

 1 data = {'Jack':{'math':90,'english':89,'art':78},
 2        'Marry':{'math':82,'english':95,'art':92},
 3        'Tom':{'math':78,'english':67}}
 4 df1 = pd.DataFrame(data)
 5 print(df1)
 6 # 由字典组成的字典创建Dataframe,columns为字典的key,index为子字典的key
 7 
 8 df2 = pd.DataFrame(data, columns = ['Jack','Tom','Bob'])
 9 df3 = pd.DataFrame(data, index = ['a','b','c'])
10 print(df2)
11 print(df3)
12 # columns参数可以增加和减少现有列,如出现新的列,值为NaN
13 # index在这里和之前不同,并不能改变原有index,如果指向新的标签,值为NaN (非常重要!)
View Code

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐