python数据分析的基础知识—pandas中dataframe()使用

文章目录

  • 前言
  • 一、DataFrame创建
    • 1、函数创建
    • 2、直接创建
    • 3、字典创建
  • 二、DataFrame属性
    • 1、查看列的数据类型
    • 2、查看DataFrame的前几行后几行
    • 3、查看行名与列名
    • 4、查看数据值
    • 5、查看行列数
  • 三、DataFrame切片与索引
    • 1、普通索引
    • 2、层次化索引
  • 四、DataFrame操作
    • 1、转置
    • 2、描述性统计
    • 3、计算
      • 算术运算
      • 逻辑运算
      • 统计函数
      • 累计统计函数
      • 相关系数和协方差
      • 自定义运算
    • 4、新增
    • 5、修改
    • 6、删除
    • 7、去重
    • 8、排序
    • 9、排名
    • 10、合并
      • merge方法
        • 基于单列的连接
        • 基于多列的连接
        • 基于index的连接方法
      • join 方法
        • index与index连接
        • 基于列进行连接(join)
      • concat 方法
        • series类型的拼接方法
        • DataFrame类型拼接方法
    • 11、使用DataFrame的行
    • 12、使用DataFrame的列
    • 练习题
  • 五、缺失值处理
    • 1、滤除缺失数据
    • 2、填充缺失数据


前言

DataFrame是一个表格型的数据结构,它含有一组有序的,每列可以是不同的值类型(数值,字符串,布尔值等)。DataFrame既有行索引也有列索引。


一、DataFrame创建

1、函数创建

代码如下:

import pandas as pd 
import numpy as np

frame=pd.DataFrame(np.random.randn(3,3),index=list('abc'),columns=list('ABC'))
frame

输出结果:

		A			B			C
a	-0.391570	0.182729	1.010572
b	0.455405	0.418206	0.134341
c	-0.491456	-0.527641	0.868909

2、直接创建

代码如下:

import pandas as pd
import numpy as np

frame= pd.DataFrame([[1, 2, 3], 
                    [2, 3, 4],
                    [3, 4, 5]],
                   index=list('abc'), columns=list('ABC'))
frame

#可以分别定义列索引(columns)与行切片(index)
frame1=pd.DataFrame([[1, 2, 3], 
                    [2, 3, 4],
                    [3, 4, 5]])
frame1.columns=list('ABC')  
frame1.index=list('abc') 
frame1      

输出结果:

>>frame
   A  B  C
a  1  2  3
b  2  3  4
c  3  4  5
>>frame1
   A  B  C
a  1  2  3
b  2  3  4
c  3  4  5

3、字典创建

代码如下:

import pandas as pd
data={
   'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
      'year':[2000,2001,2002,2001,2002],
      'pop':[1.5,1.7,3.6,2.4,2.9]}

frame=pd.DataFrame(data)
frame

输出结果:

	state	year	pop
0	Ohio	2000	1.5
1	Ohio	2001	1.7
2	Ohio	2002	3.6
3	Nevada	2001	2.4
4	Nevada	2002	2.9

二、DataFrame属性

1、查看列的数据类型

  • 使用 “DataFrame.dtypes" 要查看列数据类型

代码如下:

frame.dtypes

输出结果:

A    float64
B    float64
C    float64
dtype: object

2、查看DataFrame的前几行后几行

  • 使用 “head()” 可以查看前几行的数据,默认是前5行,参数也可以自己设置。
  • 使用 “tail()” 可以查看后几行的数据,默认是后5行,参数也可以自己设置。

默认是前5行
代码如下:

frame = pd.DataFrame(np.arange(36).reshape(6, 6), index=list('abcdef'), columns=list('ABCDEF'))
frame.head() #默认是前5

输出结果:

	A	B	C	D	E	F
a	0	1	2	3	4	5
b	6	7	8	9	10	11
c	12	13	14	15	16	17
d	18	19	20	21	22	23
e	24	25	26	27	28	29

前2行
代码如下:

frame.head(2) 

输出结果:

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

默认后5行
代码如下:

frame.tail() 

输出结果:

	A	B	C	D	E	F
b	6	7	8	9	10	11
c	12	13	14	15	16	17
d	18	19	20	21	22	23
e	24	25	26	27	28	29
f	30	31	32	33	34	35

后2行
代码如下:

frame.tail(2) 

输出结果:

	A	B	C	D	E	F
e	24	25	26	27	28	29
f	30	31	32	33	34	35

3、查看行名与列名

  • 使用 ”DataFrame.columns" 查看列名

代码如下:

frame.columns ##查看列名

输出结果:

Index(['A', 'B', 'C', 'D', 'E', 'F'], dtype='object')
  • 使用 “DataFrame.index” 查看行名

代码如下:

frame.index ##查看行名

输出结果:

Index(['a', 'b', 'c', 'd', 'e', 'f'], dtype='object')

4、查看数据值

  • 使用 “values” 可以查看DataFrame里的数据值,返的是一个数组。

代码如下:

frame.values

输出结果:

array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23],
       [24, 25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34, 35]])
  • 查看某一列所有的数据值

代码如下:

 print(frame['B'].values)

输出结果:

 [ 1  7 13 19 25 31]
  • 查看某一行所有的数据值,
    • 使用iloc查看数据值,根据数字索引(也就是行号,提示:0开始,代表第一行。);
    • 使用loc查看数据值,根据行名称进行索引。

代码如下:

frame.iloc[0]
frame.loc['a']

输出结果:

A    0
B    1
C    2
D    3
E    4
F    5

5、查看行列数

  • 使用shape查看行列数,参数为0表示查看行,参数为1表示查看列数。

代码如下:

frame.shape[0]
frame.shape[1]

输出结果:

6
6

三、DataFrame切片与索引

1、普通索引

切片表示是行切片;索引表示是列索引

  • 使用冒号进行切片
  • 借助loc,iloc

代码如下:

#使用冒号进行切片
>> frame['a':'b']
>    	A	B	C	D	E	F
	a	0	1	2	3	4	5
	b	6	7	8	9	10	11

#借助loc,iloc
#loc
>>frame.loc['a':'c','A':'C']  # ':',切片 
>		A	B	C
	a	0	1	2
	b	6	7	8
	c	12	13	14

>>frame.loc[['a','b'],['A','C']] # '[]', 索引特定行列
>		A	C
	a	0	2
	b	6	8

#iloc
>>frame.iloc[1:]  # 行切片,取第2行之后所有行
>		A	B	C	D	E	F
	b	6	7	8	9	10	11
	c	12	13	14	15	16	17
	d	18	19	20	21	22	23
	e	24	25	26	27	28	29
	f	30	31	32	33	34	35

>>frame[frame['B']==13].index #显示所有的行名
> Index(['c'], dtype='object')

  • 可以直接根据列名。
  • 使用loc/iloc

代码如下:

>>frame['A'] #取名为‘A‘的列
> 	a     0
  	b     6
  	c    12
    d    18
 	e    24
  	f    30
  	
>>frame.loc[:,'A':'C'] #取A-C列
>		A	B	C
	a	0	1	2
	b	6	7	8
	c	12	13	14
	d	18	19	20
	e	24	25	26
	f	30	31	32
	
>>frame.iloc[:,1] #取第二列 
>	a     1
	b     7
	c    13
	d    19
	e    25
	f    31

行+列

代码如下:

>> frame.iloc[1:,-2:] #行:第二行开始 列:倒数第二列开始
>		E	F
	b	10	11
	c	16	17
	d	22	23
	e	28	29
	f	34	35
	
>> frame[frame['A']>7] #A值大于7的所有行
>		A	B	C	D	E	F
	c	12	13	14	15	16	17
	d	18	19	20	21	22	23
	e	24	25	26	27	28	29
	f	30	31	32	33	34	35
	
>> frame['B'][frame['A']>7]   # A>7的所有行的'B'信息
>	c    13
	d    19
	e    25
	f    31
	Name: B, dtype: int32

2、层次化索引

层次化索引能在一个轴上拥有多个(两个以上)索引级别。

代码如下:

frame=pd.DataFrame(np.arange(12).reshape((4,3)),index=[["a","a","b","b"],[1,2,1,2]],columns=[["apple","apple","avocado"],["red","green","green"]])
frame

输出结果:

		apple		avocado
		red	green	green
a	1	0	1		2
	2	3	4		5
b	1	6	7		8
	2	9	10		11

设置行标签与列标签,代码如下:

frame.index.names=["key1","key2"] 
frame.columns.names=["state","color"]
frame

输出结果:

		state	apple	avocado
		color	red	green	green
key1	key2			
	a	1		0	1		2
		2		3	4		5
	b	1		6	7		8
		2		9	10		11

选取列分组,代码如下:

frame["apple"]

输出结果:

	red	    green
a	1	0	1
	2	3	4
b	1	6	7
	2	9	10

swaplevel()调整各级别的顺序,代码如下:

frame.swaplevel("key1","key2")
frame.swaplevel(0,1)

输出结果:

		state	apple	avocado
		color	red	green	green
key2	key1			
1		a		0	1		2
2		a		3	4		5
1		b		6	7		8
2		b		9	10		11

根据各级别汇总统计,默认为行,代码如下:

frame.sum(level="key2")

输出结果:

state	apple	avocado
color	red	green	green
key2			
	1	6	8	10
	2	12	14	16

根据各列级别汇总统计,代码如下:

frame.sum(level="color",axis=1)

输出结果:

		color	red	green
key1	key2		
	a		1	0	3
			2	3	9
	b		1	6	15
			2	9	21

四、DataFrame操作

1、转置

  • 使用字母".T"

代码如下:

frame.T

输出结果:

	a	b	c	d	e	f
A	0	6	12	18	24	30
B	1	7	13	19	25	31
C	2	8	14	20	26	32
D	3	9	15	21	27	33
E	4	10	16	22	28	34
F	5	11	17	23	29	35

2、描述性统计

  • 使用 “describe()” 可以对数据根据列进行描述性统计,如果有的列是非数值型的,就是不会进行统计,如果想对行进行描述性统计,转置后再进行"describe()“

代码如下:

frame.describe()

输出结果:

			A			B			C			D			E			F
count	6.000000	6.000000	6.000000	6.000000	6.000000	6.000000
mean	15.000000	16.000000	17.000000	18.000000	19.000000	20.000000
std		11.224972	11.224972	11.224972	11.224972	11.224972	11.224972
min		0.000000	1.000000	2.000000	3.000000	4.000000	5.000000
25%		7.500000	8.500000	9.500000	10.500000	11.500000	12.500000
50%		15.000000	16.000000	17.000000	18.000000	19.000000	20.000000
75%		22.500000	23.500000	24.500000	25.500000	26.500000	27.500000
max		30.000000	31.000000	32.000000	33.000000	34.000000	35.000000

3、计算

算术运算

  • add(other) 数学运算加上具体的一个数字

代码如下:

frame['A'].add(100)

输出结果:

a    100
b    106
c    112
d    118
e    124
f    130
  • sub(other) 求出两列的数据差

代码如下:

frame['A-B‘]=frame['A'].sub(frame['B'])
frame

输出结果:

	A	B	C	D	E	F	A-B
a	0	1	2	3	4	5	-1
b	6	7	8	9	10	11	-1
c	12	13	14	15	16	17	-1
d	18	19	20	21	22	23	-1
e	24	25	26	27	28	29	-1
f	30	31	32	33	34	35	-1
  • round(other) : 保留小数位数

保留两位小数
代码如下:

frame2=pd.DataFrame({
   'col1':[1.234,2.34,4.5678],'col2':[1.0987,0.9876,3.45]}) #
frame2.round(2)

输出结果:

	col1	col2
0	1.23	1.10
1	2.34	0.99
2	4.57	3.45

不同的列制定不同的小数位数
代码如下:

frame2.round({
   'col1':1,'col2':2}) 

输出结果:

	col1 col2
0	1.2	 1.10
1	2.3	 0.99
2	4.6	 3.45
  • div(other,axis,level,fill_value):用于除法(/)
    • other:标量、序列、Series 或 DataFrame。
    • axis:0:针对列进行处理,1:针对行进行处理,默认为1。仅当源DataFrame的形状与other形状不对齐时,axis才相关。
    • level:要考虑级别的名称或整数索引,仅当您的DataFrame是多索引时,这才相关。
    • fill_value:在计算之前,使用此值填充现有的缺失(NaN)值以及成功完成DataFrame对齐所需的任何新元素。两个NaN值除法仍得到NaN。默认情况下,fill_value=None。

Dataframe与Dataframe之间的相除
代码如下:

import pandas as pd

frame1 = pd.DataFrame([[1, 2, 3], 
                   	   [2, 3, 4],
                       [3, 4, 5]],
                   index=list('abc'), columns=list('ABC'))


import pandas as pd

frame2 = pd.DataFrame([[1, 2, 3], 
                   	   [2, 6, 8],
                       [9, 8, 10]],
                   index=list('abc'), columns=list('ABC'))
                  
frame1.div(frame2)              

输出结果:

	A			B	C
a	1.000000	1.0	1.0
b	1.000000	0.5	0.5
c	0.333333	0.5	0.5

Dataframe与Dataframe之间的相除:DataFrame带有缺失值
代码如下:

import pandas as pd

frame1 = pd.DataFrame([[1, 2, None], 
                       [

你可能感兴趣的:(python数据分析基础知识,python数据分析系列,python,pandas,数据分析)