pandas高级数据结构

Pandas介绍与安装

为什么会有Pandas?

Pandas支持大部分Numpy语言风格,尤其是数组函数与广播机制的各种数据处理。但是Numpy更适合处理同质型的数据。而Pandas的设计就是用来处理表格型或异质型数据的,高效的清洗、处理数据。

Pandas是什么?

Pandas是基于Numpy的一种工具,提供了高性能矩阵的运算,该工具是为了解决数据分析任务而创建的。也是贯穿整个Python数据分析非常核心的工具。

Pandas安装

直接在dos命令行中pip install pandas 即可。

Series

Series介绍
Series是一种一维的数组型对象,它包含了一个值序列(values),并且包含了数据标签,称为索引(index)。

  • Series创建
    pd.Series(data=None,index=None,dtype=None,name=None,copy=False)
    data:创建数组的数据,可为array-like, dict, or scalar value
    index:指定索引
    dtype:数组数据类型
    name:数组名称
    copy:是否拷贝
    (1)、通过列表创建,index索引属性,values数组
fd = pd.Series([1,2,3,4,5])
0    1
1    2
2    3
3    4
4    5
dtype: int64
fd.index
RangeIndex(start=0, stop=5, step=1)
fd.values
array([1, 2, 3, 4, 5], dtype=int64)
fd[1]
2
fd1 = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
fd1
a    1
b    2
c    3
d    4
e    5
dtype: int64

(2)、通过数组创建

fd2 = pd.Series(np.array([1,2,3,4]))
fd2
0    1
1    2
2    3
3    4
dtype: int32

(3)、通过元组创建

fd3 = pd.Series((1,2,3,4))
fd3
0    1
1    2
2    3
3    4
dtype: int64

(4)、通过字典创建

dict1 = {'name':'东方不败','age':18,'sex':'男'}
fd4 = pd.Series(dict1)
fd4
name    东方不败
age       18
sex        男
dtype: object
fd4 = pd.Series(dict1,index=['a','b','c'])
fd4
a    NaN
b    NaN
c    NaN
dtype: object
fd5 = pd.Series(dict1,index=['age','name','sex'])
fd5
age       18
name    东方不败
sex        男
dtype: object
  • Series 索引
dict1 = {'name':'东方不败','age':18,'sex':'男'}
fd4 = pd.Series(dict1)
fd4
name    东方不败
age       18
sex        男
dtype: object
fd4.index
Index(['name', 'age', 'sex'], dtype='object')
fd4['name']
'东方不败'
fd4[0]
'东方不败'
fd4[0:2]
name    东方不败
age       18
dtype: object
fd4[::-1]
sex        男
age       18
name    东方不败
dtype: object
fd4[2:0:-1]
sex     男
age    18
dtype: object
  • Series 广播、命名、转置、读取等
fd = pd.Series([1,2,3,4,5])
fd
0    1
1    2
2    3
3    4
4    5
dtype: int64
fd+5
0     6
1     7
2     8
3     9
4    10
dtype: int64
fd.name ='人数'
fd.index.name ='班次'
fd
班次
0    1
1    2
2    3
3    4
4    5
Name: 人数, dtype: int64
fd.T
班次
0    1
1    2
2    3
3    4
4    5
Name: 人数, dtype: int64
fd.head(2)
班次
0    1
1    2
Name: 人数, dtype: int64
fd.tail(2)
班次
3    4
4    5
Name: 人数, dtype: int64

DataFrame

DataFrame介绍
DataFrame表示的是矩阵的数据表,它包含已排序的列集合,每一列可以是不同的值类型(数值,字符串,布尔值)。在DataFrame中,数据被存储为一个以上的二维块。

DataFrame创建
pd.DataFrame(data=None,index=None,columns=None,dtype=None,copy=False)
data:创建数组的数据,可为ndarray, dict
index:指定索引
dtype:数组数据类型
copy:是否拷贝

  • DateFrame创建数组
    1、字典创建,先列后行
data = {'A':[0,1,2],'B':[3,4,5],'C':[6,7,8]}
pd.DataFrame(data)

   A     B  C
0   0   3   6
1   1   4   7
2   2   5   8
a1.index
a1.index
RangeIndex(start=0, stop=3, step=1)
a1.values
array([[0, 3, 6],
       [1, 4, 7],
       [2, 5, 8]], dtype=int64)
a1 = pd.DataFrame(data,index=['a','b','c'],columns=['B','A','C'])
a1

     B  A   C
a   3   0   6
b   4   1   7
c   5   2   8

2、字典创建通过Series,先列后行

df2 = pd.DataFrame({'a':pd.Series(np.arange(3)),
'b':pd.Series(np.arange(3,5))})
df2
    a   b
0   0   3.0
1   1   4.0
2   2   NaN

3、通过字典嵌套,先列后行

data = {
    'a':{'apple':3.6,'banana':5.6},
    'b':{'apple':3,'banana':5},
    'c':{'apple':3.2},
}
df5 = pd.DataFrame(data)
df5
         a   b      c
apple   3.6 3   3.2
banana  5.6 5   NaN

4、通过列表数组,先列后行

arr = np.arange(12).reshape(3,4)
pd.DataFrame(arr)
    0   1   2   3
0   0   1   2   3
1   4   5   6   7
2   8   9   10  11
pd.DataFrame(arr,index=['a','b','c'],columns =['A','B','C','D'])

     A   B  C   D
a   0   1   2   3
b   4   5   6   7
c   8   9   10  11

5、通过字典构造的列表,构造DataFrame,按行

l1 = [{'apple':3.6,'banana':5.6},{'apple':3.1,'banana':5.1},{'apple':3.0}]
pd.DataFrame(l1)
    apple   banana
0   3.6 5.6
1   3.1 5.1
2   3.0 NaN

6、通过Series组成的列表构造DataFrame项目

l2 = [pd.Series(np.arange(3)),pd.Series(np.arange(3,6))]
pd.DataFrame(l2)
    0   1   2
0   0   1   2
1   3   4   5

DataFrame查询(先列后行)

import numpy as np
import pandas as pd
dict1 = {'A':[0,1,2],'B':[3,4,5],'C':[6,7,8]}
s = pd.DataFrame(dict1)
s
    A   B   C
0   0   3   6
1   1   4   7
2   2   5   8
s['A']
0    0
1    1
2    2
Name: A, dtype: int64
s.loc[0]
A    0
B    3
C    6
Name: 0, dtype: int64
s['A'][1]
1

DataFrame改(先列后行)

s['B'] = [9,99,99]
s
    A   B   C
0   0   9   6
1   1   99  7
2   2   99  8
s.loc[1] = 8
s
A   B   C
0   0   9   6
1   8   8   8
2   2   99  8

DataFrame增(先列后行)

s['D'] =1
s
    A   B   C   D
0   0   9   6   1
1   8   8   8   1
2   2   99  8   1
s.loc['2'] = 100
s

    A   B   C   D
0   0   9   6   1
1   8   8   8   1
2   2   99  8   1
2   100 100 100 100
s.loc[2]=110
s
A   B   C   D
0   0   9   6   1
1   8   8   8   1
2   110 110 110 110
2   100 100 100 100

DataFrame增(先列后行)

del()相于删除了不可恢复,慎用
drop()方法中axis =1 代表列,axis =0 代表行
drop()有一个返回值,但对源数据没有影响
inplace=True时,相当于引用了del语句

dict1 = {'A':[0,1,2],'B':[3,4,5],'C':[6,7,8]}
s1 = pd.DataFrame(dict1)
s1

    A   B   C
0   0   3   6
1   1   4   7
2   2   5   8
s1['D'] = 9
    A   B   C   D
0   0   3   6   9
1   1   4   7   9
2   2   5   8   9
del(s1['D'])
s1

    A   B   C
0   0   3   6
1   1   4   7
2   2   5   8
s1['D'] = 10
s1.drop('D',axis =1)

    A   B   C
0   0   3   6
1   1   4   7
2   2   5   8
s1.drop(1,axis = 0)
A   B   C   D
0   0   3   6   10
2   2   5   8   10
s1.drop('C',axis =1,inplace = True)
    A   B
0   0   3
1   1   4
2   2   5

作业

1、创建一个Series对象

import numpy as np
import pandas as pd
score = pd.Series(data=[90,95,85,78,np.NAN,96,94,np.NAN,80,87,86,83],
index=range(1,13),name='score')
score.index.name = "class"
score
class
1     90.0
2     95.0
3     85.0
4     78.0
5      NaN
6     96.0
7     94.0
8      NaN
9     80.0
10    87.0
11    86.0
12    83.0
Name: score, dtype: float64

2、查看1-5班的成绩

import pandas as pd
score[0:5]
class
1    90.0
2    95.0
3    85.0
4    78.0
5     NaN
Name: score, dtype: float64

3、查看哪个班级的成绩没有录入
思路:把NAN数据替换成0,然后取0值对应的index

score1 = score.fillna(0)
score1[score1.values ==0].index
Int64Index([5, 8], dtype='int64', name='class')

4、获取11班的成绩

score[11]
86.0

5、在每个人的成绩加5分

score+5

class
1      95.0
2     100.0
3      90.0
4      83.0
5       NaN
6     101.0
7      99.0
8       NaN
9      85.0
10     92.0
11     91.0
12     88.0
Name: score, dtype: float64

6、找出成绩在90分以上的班级

score[score.values>90].index
Int64Index([2, 6, 7], dtype='int64', name='class')

7、创建一个DataFrame

import numpy as np
import pandas as pd
data = {
    "姓名":['张三','李四','王五','小明','小红','小刚','小亮'],
    "语文":[89,78,79,89,90,87,83],
    "数学":[59,83,85,92,67,81,77],
    "英语":[84,97,88,83,67,73,71],
    "体育":[0,0,0,0,0,0,0]
}
df = pd.DataFrame(data)
df

姓名  语文  数学  英语  体育
0   张三  89  59  84  0
1   李四  78  83  97  0
2   王五  79  85  88  0
3   小明  89  92  83  0
4   小红  90  67  67  0
5   小刚  87  81  73  0
6   小亮  83  77  71  0

8、进行转置

df.T
    0   1   2   3   4   5   6
姓名  张三  李四  王五  小明  小红  小刚  小亮
语文  89  78  79  89  90  87  83
数学  59  83  85  92  67  81  77
英语  84  97  88  83  67  73  71
体育  0   0   0   0   0   0   0

9、删除掉体育成绩

df.drop('体育',axis =1,inplace = True)
df
    姓名  语文  数学  英语
0   张三  89  59  84
1   李四  78  83  97
2   王五  79  85  88
3   小明  89  92  83
4   小红  90  67  67
5   小刚  87  81  73
6   小亮  83  77  71

10、添加‘综合’这个课程的成绩 (成绩自定义)

df['综合']=0
df
姓名  语文  数学  英语  综合
0   张三  89  59  84  0
1   李四  78  83  97  0
2   王五  79  85  88  0
3   小明  89  92  83  0
4   小红  90  67  67  0
5   小刚  87  81  73  0
6   小亮  83  77  71  0

你可能感兴趣的:(pandas高级数据结构)