模块一:python的基础知识
一、基本概念
1、数
整数int、浮点数float
2、变量
模块二:pandas数据结构
一、series数据结构
1、含义:
series是一种类似于一维数组的对象,由一组数据与之相关的数据标签(即索引)组成
0 a
1 b
2 c
3 d
dtype:object
以上即为series数据结构,第一列数字是数据标签,第二列是具体的数据,数据标签与数据是一一对应的
2、创建一个series
方法:利用pd.Series(),通过给Series()方法传入不同的对象即可实现
传入一个列表:
import pandas as pd
S1 = pd.Series(['a','b','c','d'])
S1
Out[3]:
0 a
1 b
2 c
3 d
dtype: object
指定索引:
# 直接传入一个列表会默认索引,可通过设置index参数来自定义索引
S2 = pd.Series([1,2,3,4],index = ['a','b','c','d'])
S2
Out[6]:
a 1
b 2
c 3
d 4
dtype: int64
传入一个字典:
# 除series外,也可将数据与数据标签以key:value(字典)的形式传入,这样字典的key值就是数据标签,value就是数据值
S3 = pd.Series({
'a':1,'b':2,'c':3,'d':4})
S3
Out[8]:
a 1
b 2
c 3
d 4
dtype: int64
3、利用index方法获取Series的索引
S1.index
Out[9]: RangeIndex(start=0, stop=4, step=1)
S2.index
Out[10]: Index(['a', 'b', 'c', 'd'], dtype='object')
4、利用values方法获取series的值
# 与索引值对应的就是获取series的值,使用的方法是values方法
S1.values
Out[11]: array(['a', 'b', 'c', 'd'], dtype=object)
S2.values
Out[12]: array([1, 2, 3, 4], dtype=int64)
二、DataFrame表格型数据结构
1、含义:
series是由一组数据与一组索引(行索引)组成的数据结构,而dataframe是由一组数据与一对索引(行索引和列索引)组成的表格型数据结构。
# 例如
技能
第一 excel
第二 sql
第三 python
第四 ppt
2、创建一个Dataframe
创建dataframe使用的方法是pd.DataFrame()
import pandas as pd
df1 = pd.DataFrame(['a','b','c','d'])
df1
Out[15]:
0
0 a
1 b
2 c
3 d
# 只传入一个单一列表时,该列表的值会显示成一列,且行和列都是从0开始的默认索引
3、传入一个嵌套列表
df2 = pd.DataFrame([['a','A'],['b','B'],['c','C'],['d','D']])
df2
Out[19]:
0 1
0 a A
1 b B
2 c C
3 d D
# 当传入一个嵌套列表时,会根据嵌套列表数显示成多列数据,行、列索引同样是从0开始的默认索引。列表里面嵌套的列表也可以换成元组
df2 = pd.DataFrame([('a','A'),('b','B'),('c','C'),('d','D')])
df2
Out[21]:
0 1
0 a A
1 b B
2 c C
3 d D
q1:# 传入的嵌套列表是元组还是列表是否有影响?
4、指定行、列索引
# 如果只给DataFrame()方法传入列表,则行、列索引都是默认值,可以通过设置columns参数自定义列索引,设置index参数自定义行索引
#设置列索引
df31 = pd.DataFrame([['a','A'],['b','B'],['c','C'],['d','D']],columns = ['大写','小写'])
df31
Out[24]:
大写 小写
0 a A
1 b B
2 c C
3 d D
#设置行索引
df32 = pd.DataFrame([['a','A'],['b','B'],['c','C'],['d','D']],index = ['大写','小写','没写','不写'])
df32
Out[26]:
0 1
大写 a A
小写 b B
没写 c C
不写 d D
#同时设置行列索引
df33 = pd.DataFrame([['a','A'],['b','B'],['c','C'],['d','D']],columns = ['大写','小写'],index = ['一','二','三','四'])
df33
Out[30]:
大写 小写
一 a A
二 b B
三 c C
四 d D
5、传入一个字典
data = {
'小写':['a','b','c','d'],'大写':['A','B','C','D']}
df41 = pd.DataFrame(data)
df41
Out[35]:
小写 大写
0 a A
1 b B
2 c C
3 d D
# 直接以字典的形式传入DataFrame时,字典的key值就相当于列索引,这个时候如果没有设置行索引,则行索引默认,也可通过index参数自定义行索引
df42 = pd.DataFrame(data,index = ['一','二','三','四'])
df42
Out[37]:
小写 大写
一 a A
二 b B
三 c C
四 d D
6、获取DataFrame的行、列索引
利用columns方法获取DataFrame的列索引
df42.columns
Out[38]: Index(['小写', '大写'], dtype='object')
df33.columns
Out[39]: Index(['大写', '小写'], dtype='object')
利用index方法获取DataFrame的行索引
df42.index
Out[40]: Index(['一', '二', '三', '四'], dtype='object')
7、获取DataFrame的值
模块三:获取数据源
一、导入外部数据
导入数据主要用到read_x()方法,x表示待导入文件的格式
1、导入.xlsx文件
#使用的是read_excel()
#基本导入
需要指定文件路径
***可使用转义符r进行转义***
df = pd.read_excel(r"C:\Users\Lenovo\Desktop\工作簿1.xlsx")
df
Out[46]:
123412 324
0 23df srt
1 NaN 23
2 123 df
也可将\换成/
df = pd.read_excel("C:/Users/Lenovo/Desktop/工作簿1.xlsx")
df
Out[48]:
123412 324
0 23df srt
1 NaN 23
2 123 df
#指定导入哪个sheet
***可通过设定sheet_name参数来指定要导入哪个sheet的文件***
df11 = pd.read_excel(r"C:\Users\Lenovo\Desktop\data20200511185912.xlsx",sheet_name = 'Sheet1')
df11
Out[52]:
用户ID 求和项:已结算金额
0 2210110(健(破壁灵芝孢子粉批发零售)) 85.0
1 3287660(A 娜娜) 67.5
2 3399814(大爷) 56.0
3 1960736(凌海波) 50.0
4 2082573(天之龙王小姐) 48.0
.. ... ...
59 2130124(心若安好,便是晴天) 0.0
60 1997928(晴天) 0.0
61 1387016(S STAR) 0.0
62 1075830(青鸟) 0.0
63 总计 1513.0
[64 rows x 2 columns]
***除了可以指定具体Sheet的名字,还可以传入Sheet的顺序,从0开始计数***
df12 = pd.read_excel(r"C:\Users\Lenovo\Desktop\data20200511185912.xlsx",sheet_name = 1)
df12
Out[54]:
团队名称 团队ID 项目ID 项目名称 ... 质检打回数量 打回比例 质检数量 质检比例
0 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 0 * 0 *
1 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 3 0.6 12 2.4
2 龙猫标注官方团队二分部 3631 2728.0 【返修】多类别实例语义分割 ... 0 * 0 *
3 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 0 * 0 *
4 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 0 * 0 *
.. ... ... ... ... ... ... ... ... ...
71 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 0 * 0 *
72 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 0 * 0 *
73 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 0 * 0 *
74 龙猫标注官方团队二分部 3631 2736.0 【标注】场景语义分割 ... 0 * 0 *
75 NaN 数据汇总 NaN NaN ... 11 0.0155 54 0.0762
[76 rows x 20 columns]
df12 = pd.read_excel(r"C:\Users\Lenovo\Desktop\data20200511185912.xlsx",sheet_name = 0)
df12
Out[56]:
用户ID 求和项:已结算金额
0 2210110(健(破壁灵芝孢子粉批发零售)) 85.0
1 3287660(A 娜娜) 67.5
2 3399814(大爷) 56.0
3 1960736(凌海波) 50.0
4 2082573(天之龙王小姐) 48.0
.. ... ...
59 2130124(心若安好,便是晴天) 0.0
60 1997928(晴天) 0.0
61 1387016(S STAR) 0.0
62 1075830(青鸟) 0.0
63 总计 1513.0
[64 rows x 2 columns]
***如果不指定Sheet_name参数时,默认导入第一个Sheet的文件
#指定行索引
可以通过设置index_col参数来指定行索引,index_col表示用.xlsx文件中的第几列做行索引,从0开始数,也可以直接指定列名
df12 = pd.read_excel(r"C:\Users\Lenovo\Desktop\data20200511185912.xlsx",sheet_name = 1,index_col = '项目名称')
df12
Out[58]:
团队名称 团队ID 项目ID 任务ID ... 质检打回数量 打回比例 质检数量 质检比例
项目名称 ...
【标注】多类别实例语义分割 龙猫标注官方团队二分部 3631 2629.0 8734.0 ... 0 * 0 *
【标注】多类别实例语义分割 龙猫标注官方团队二分部 3631 2629.0 8735.0 ... 3 0.6 12 2.4
【返修】多类别实例语义分割 龙猫标注官方团队二分部 3631 2728.0 9001.0 ... 0 * 0 *
【标注】多类别实例语义分割 龙猫标注官方团队二分部 3631 2629.0 8733.0 ... 0 * 0 *
【标注】多类别实例语义分割 龙猫标注官方团队二分部 3631 2629.0 8733.0 ... 0 * 0 *
... ... ... ... ... ... ... ... ...
【标注】多类别实例语义分割 龙猫标注官方团队二分部 3631 2629.0 8733.0 ... 0 * 0 *
【标注】多类别实例语义分割 龙猫标注官方团队二分部 3631 2629.0 8733.0 ... 0 * 0 *
【标注】多类别实例语义分割 龙猫标注官方团队二分部 3631 2629.0 8733.0 ... 0 * 0 *
【标注】场景语义分割 龙猫标注官方团队二分部 3631 2736.0 9022.0 ... 0 * 0 *
NaN NaN 数据汇总 NaN NaN ... 11 0.0155 54 0.0762
[76 rows x 19 columns]
#指定列索引
可以通过设置header参数来指定列索引,header参数表示用.xlsx文件中的第几行做列索引
使用第一行作为列索引
df12 = pd.read_excel(r"C:\Users\Lenovo\Desktop\data20200511185912.xlsx",sheet_name = 1,header = 0)
df12
Out[60]:
团队名称 团队ID 项目ID 项目名称 ... 质检打回数量 打回比例 质检数量 质检比例
0 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 0 * 0 *
1 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 3 0.6 12 2.4
2 龙猫标注官方团队二分部 3631 2728.0 【返修】多类别实例语义分割 ... 0 * 0 *
3 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 0 * 0 *
4 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 0 * 0 *
.. ... ... ... ... ... ... ... ... ...
71 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 0 * 0 *
72 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 0 * 0 *
73 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 0 * 0 *
74 龙猫标注官方团队二分部 3631 2736.0 【标注】场景语义分割 ... 0 * 0 *
75 NaN 数据汇总 NaN NaN ... 11 0.0155 54 0.0762
[76 rows x 20 columns]
使用第二行作为列索引
df12 = pd.read_excel(r"C:\Users\Lenovo\Desktop\data20200511185912.xlsx",sheet_name = 1,header = 1)
df12
Out[62]:
龙猫标注官方团队二分部 3631 2629 【标注】多类别实例语义分割 ... 0.1 * 0.2 *.1
0 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 3 0.6 12 2.4
1 龙猫标注官方团队二分部 3631 2728.0 【返修】多类别实例语义分割 ... 0 * 0 *
2 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 0 * 0 *
3 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 0 * 0 *
4 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 0 * 0 *
.. ... ... ... ... ... ... ... .. ...
70 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 0 * 0 *
71 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 0 * 0 *
72 龙猫标注官方团队二分部 3631 2629.0 【标注】多类别实例语义分割 ... 0 * 0 *
73 龙猫标注官方团队二分部 3631 2736.0 【标注】场景语义分割 ... 0 * 0 *
74 NaN 数据汇总 NaN NaN ... 11 0.0155 54 0.0762
[75 rows x 20 columns]
使用默认从0开始的数作为列索引
df12 = pd.read_excel(r"C:\Users\Lenovo\Desktop\data20200511185912.xlsx",sheet_name = 1,header = None)
df12
Out[64]:
0 1 2 3 ... 16 17 18 19
0 团队名称 团队ID 项目ID 项目名称 ... 质检打回数量 打回比例 质检数量 质检比例
1 龙猫标注官方团队二分部 3631 2629 【标注】多类别实例语义分割 ... 0 * 0 *
2 龙猫标注官方团队二分部 3631 2629 【标注】多类别实例语义分割 ... 3 0.6 12 2.4
3 龙猫标注官方团队二分部 3631 2728 【返修】多类别实例语义分割 ... 0 * 0 *
4 龙猫标注官方团队二分部 3631 2629 【标注】多类别实例语义分割 ... 0 * 0 *
.. ... ... ... ... ... ... ... ... ...
72 龙猫标注官方团队二分部 3631 2629 【标注】多类别实例语义分割 ... 0 * 0 *
73 龙猫标注官方团队二分部 3631 2629 【标注】多类别实例语义分割 ... 0 * 0 *
74 龙猫标注官方团队二分部 3631 2629 【标注】多类别实例语义分割 ... 0 * 0 *
75 龙猫标注官方团队二分部 3631 2736 【标注】场景语义分割 ... 0 * 0 *
76 NaN 数据汇总 NaN NaN ... 11 0.0155 54 0.0762
[77 rows x 20 columns]
#指定导入列
可以通过设置usecols参数来指定要导入的列,给定usecols参数具体的某个值,表示要导入第几列,同样是从0开始计数,也可以以列表的形式传入多个值,表示要传入哪些列
df12 = pd.read_excel(r"C:\Users\Lenovo\Desktop\data20200511185912.xlsx",usecols = [0,1])
df12
Out[85]:
用户ID 求和项:已结算金额
0 2210110(健(破壁灵芝孢子粉批发零售)) 85.0
1 3287660(A 娜娜) 67.5
2 3399814(大爷) 56.0
3 1960736(凌海波) 50.0
4 2082573(天之龙王小姐) 48.0
.. ... ...
59 2130124(心若安好,便是晴天) 0.0
60 1997928(晴天) 0.0
61 1387016(S STAR) 0.0
62 1075830(青鸟) 0.0
63 总计 1513.0
[64 rows x 2 columns]
2、导入.csv文件
使用的是read_csv()方法
#直接导入,只需要指明文件路径即可
df = pd.read_csv(r"C:\Users\Lenovo\Desktop\无标题.csv")
df
Out[105]:
id uid ... explain month_amount
0 49207 3158538 ... NaN 0
1 49457 2418764 ... NaN 3575
2 49459 859671 ... NaN 0
3 49461 3172834 ... NaN 7288
4 49462 2969695 ... NaN 0
.. ... ... ... ... ...
269 77373 3402929 ... NaN 0
270 77374 3502570 ... NaN 0
271 77770 3235269 ... NaN 0
272 77771 3506557 ... NaN 0
273 77772 3288169 ... NaN 0
[274 rows x 11 columns]
#指明指定分隔符号。read_csv()默认文件中的数据都是以逗号分开的,但是有的文件不是用逗号分开的,这个时候就需要人为指定分隔符号,否则就会报错
df = pd.read_csv(r"C:\Users\Lenovo\Desktop\工作簿2.csv",sep = ',')
df
Out[111]:
123 541 ``
0 sdfssd 548 sd5f4
1 NaN sdf NaN
df = pd.read_csv(r"C:\Users\Lenovo\Desktop\工作簿2.csv",sep = ' ')
df
Out[109]:
123,541,``
0 sdfssd,548,sd5f4
1 ,sdf,
#指明读取行数
可通过设置nrows参数即可
df = pd.read_csv(r"C:\Users\Lenovo\Desktop\工作簿2.csv",sep = ',',nrows = 1)
df
Out[115]:
123 541 ``
0 sdfssd 548 sd5f4
#指定编码格式
python用得比较多的两种编码格式是UTF-8和gbk,默认编码格式是UTF-8,可通过设置encoding = 'utf-8'或'gbk'来设置导入的编码格式
#engine指定
当文件路径或文件名中包含中文时,如果还用基础的导入方式就会报错,可通过设置engine参数来消除这个错误。
这个错误主要是因为当调用read_csv()方法时,默认使用C语言作为解析语言,所以需要把engine的默认值更改为python。
如果文件格式是CSV UTF-8(逗号分割)(*.csv),那么编码格式也需要跟着变为utf-8-sig,如果文件格式是CSV(逗号分隔)(*.csv)格式,对应的编码格式则为gbk
3、导入.txt文件
通过使用read_table()即可
read_table()是将利用分隔符分开的文件导入DataFrame的通用函数
不仅可以导入.txt文件,还可以导入.csv文件
***使用read_table()导入文件时,不论什么文件都需要指定好分隔符才可以***
#导入.txt文件
df = pd.read_table(r"C:\Users\Lenovo\Desktop\文本文件测试.txt",sep = '\t')
df
Out[119]:
id uid ... explain month_amount
0 49207