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