pandas 笔记003


目录

  • pandas 笔记003
  • 三、DataFrame索引的创建和基本用法
  • 1.DataFrame索引的创建
  • 1.1 字典类构造dataframe
  • 1.1.1 数组、列表或元组构成的字典构造dataframe
  • 1.1.2 Series构成的字典构造dataframe
  • 1.1.3 字典构成的字典构造dataframe(字典嵌套)
  • 1.2 列表类构造dataframe
  • 1.2.1 通过 2D ndarray(二维数组) 构造dataframe
  • 1.2.2 字典构成的列表构造dataframe
  • 1.2.3 Series构成的列表构造dataframe
  • 2.DataFrame索引的基本用法
  • 2.1 T转置
  • 2.2 通过列索引获取列数据
  • 2.3 增加列数据
  • 2.4 删除列


三、DataFrame索引的创建和基本用法

DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的数据类型。

DataFrame既有行索引,也有列索引,可以看作有Series索引组成的字典(共用一个索引),数据是以二维结构存放的。

1.DataFrame索引的创建

字典类:

  • 数组、列表或元组构成的字典构造dataframe
  • Series构成的字典构造dataframe
  • 字典构成的字典构造dataframe

列表类:

  • 2D ndarray 构造dataframe
  • 字典构成的列表构造dataframe
  • Series构成的列表构造dataframe
import numpy as np
import pandas as pd
1.1 字典类构造dataframe
1.1.1 数组、列表或元组构成的字典构造dataframe

注意:数组、列表或元组的元素个数要相同,否则报错

#构造一个字典
dict = {'a':[1,2,3,4],
        'b':(5,6,7,8),
        'c':np.arange(1,5)}     #数组、列表或元组的元素个数要相同,否则报错
#构造dataframe
frame = pd.DataFrame(dict)
frame
a	b	c
0	1	5	1
1	2	6	2
2	3	7	3
3	4	8	4

指定索引行和列

注意:指定的列索引数量可以大于原来的,如果值不是原来的会返回NAN。指定的行索引可随意变化。

#指定行索引,指定的列索引数量可以大于原来的,如果值不是原来的会返回NAN
frame = pd.DataFrame(dict,index=['A','B','C','D'],columns=['a','b','c','d'])
frame
a	b	c	d
A	1	5	1	NaN
B	2	6	2	NaN
C	3	7	3	NaN
D	4	8	4	NaN
1.1.2 Series构成的字典构造dataframe

注意:不可指定索引行列名。字典键为列索引,行索引默认为位置索引。

pd1 = pd.DataFrame({'m':pd.Series(np.arange(3)),
                   'n':pd.Series(np.arange(3,5))})
pd1
m	n
0	0	3.0
1	1	4.0
2	2	NaN
1.1.3 字典构成的字典构造dataframe(字典嵌套)

注意:不可指定索引行列名,因为内字典键为行索引,外字典将键为列索引

data = {
    'a':{'apple':3.1,'mango':4},
    'b':{'apple':3.4,'mango':5},
    'c':{'apple':3.6}      # 内字典键为行索引,外字典将键为列索引
}
pd2 = pd.DataFrame(data)
pd2
a	  b	    c
apple	3.1	  3.4	3.6
mango	4.0	  5.0	NaN
1.2 列表类构造dataframe

列表类:

  • 2D ndarray 构造dataframe
  • 字典构成的列表构造dataframe
  • Series构成的列表构造dataframe
1.2.1 通过 2D ndarray(二维数组) 构造dataframe
#构造二维数组对象
arr1 = np.arange(12).reshape(3,4)
frame1 = pd.DataFrame(arr1)
frame1
0	1	2	3 
0	0	1	2	3
1	4	5	6	7
2	8	9	10	11

指定索引名字:

注意:指定的行列要和数组形状对应,否则报错

#构造二维数组对象
arr = np.arange(12).reshape(3,4)
fr = pd.DataFrame(arr1,index=['A','B','C'],columns=['q','r','d','e'])
fr
q	r	d	e
A	0	1	2	3
B	4	5	6	7
C	8	9	10	11
1.2.2 字典构成的列表构造dataframe

注意:不可指定索引名。字典的键为列索引,列表下标为行索引。

list1 = [{'apple':3.1,'mango':4},
          {'apple':3.5,'mango':5}, 
          {'apple':3.7,'mango':6}]    #字典的键为列索引,列表下标为行索引
frame2 = pd.DataFrame(list1)
frame2
apple	mango
0	3.1	    4
1	3.5   	5  
2	3.7  	6
1.2.3 Series构成的列表构造dataframe
list2 = [pd.Series(np.arange(1,6)),pd.Series(np.random.rand(3))]
frame3 = pd.DataFrame(list2)
frame3
0	        1	        2	        3	  4
0	1.000000	2.00000	    3.000000	4.0	  5.0
1	0.685936	0.68622  	0.665779	NaN	  NaN

注意:可以指定行索引,不可指定列索引(报错)

frame4 = pd.DataFrame(list2,index=['A','B'])
frame4
0	        1	        2	        3	  4
A	1.000000	2.000000	3.000000	4.0	  5.0
B	0.240193	0.961042	0.065993	NaN	  NaN

2.DataFrame索引的基本用法

  • T转置
  • 通过列索引获取列数据(Series类型)
  • 增加列数据
  • 删除列
h = pd.DataFrame(np.arange(9).reshape(3,3),index=['a','b','c'],columns=['A','B','C'])  #通过二维数组构造dataframe
h
A	B	C
a	0	1	2
b	3	4	5
c	6	7	8
2.1 T转置

行转为列,列转为行。

h.T
a	b	c
A	0	3	6
B	1	4	7
C	2	5	8
2.2 通过列索引获取列数据
#2.通过列索引获取列数据(Series类型)
print(h['A'])  #获取A这一列数据
print("="*20)
print(type(h['A'])) #查看数据类型,为Series类型
a    0
b    3
c    6
Name: A, dtype: int32
====================
<class 'pandas.core.series.Series'>
2.3 增加列数据

增加相同值

h['d'] = 5   #增加一列d,值全为5
h
A	B	C	d
a	0	1	2	5
b	3	4	5	5
c	6	7	8	5

增加不同值

h['f'] = ['10','11','12']   #增加一列f,值分别为10,11,12
h['g'] = [9,0,9]   #增加一列g,值分别为9,0,9   #列表中加不加引号都可以
h
A	B	C	d	f	g
a	0	1	2	5	10	9
b	3	4	5	5	11	0
c	6	7	8	5	12	9
2.4 删除列
#4.删除列
del(h['g'])  #删除g这一列
h
A	B	C	d	f
a	0	1	2	5	10
b	3	4	5	5	11
c	6	7	8	5	12