pandas学习汇总(关于怎样处理数据与分析)

不知道有没有小伙伴跟我一样,之前也断断续续学习过python相关的知识,可是迟迟就是入不了门,开始是出现了问题,不知道怎么解决问题,动不动就是入门到放弃;后续是认认真真看视频,认认真真“复制”代码,可是还是没学懂,后续发现学习都还是一点一滴的来的,最开始就要从最最最简单的东西开始,从自己熟悉的东西入手,而不是看一些复杂的代码,从懂一行代码开始,再到后续慢慢学会看复杂的代码

下面的内容基于《对比excel,轻松学习python数据分析》这本书以及《这十套练习,教你如何用Pandas做数据分析》这个练习做的一点点总结,后续发现关于python的数据的处理也是有一套流程的;后面如果发现一些用法也会不断补充在这里面滴~

数据文件

  • 可能会有小伙伴问数据在哪里查到,下面的数据小伙伴可以自行创建在对应的文件夹下面,数据量就只有十几条,是比较方便创建的
  • 当然也可以用自己的数据文件
  • 注意文件的格式一个是excel表格,一个是csv
  • 目前一共有两个表格一个叫Trips(上),一个叫Users(下)
year month day date Id Client_Id Driver_Id City_Id Status
2013 10 1 2013/10/1 1 1 10 1 completed
2013 10 1 2013/10/1 2 2 11 1 cancelled_by_driver
2013 10 1 2013/10/1 3 3 12 6 completed
2013 10 1 2013/10/1 4 4 13 6 cancelled_by_client
2013 10 2 2013/10/2 5 1 10 1 completed
2013 10 2 2013/10/2 6 2 11 6 completed
2013 10 2 2013/10/2 7 3 12 6 completed
2013 10 3 2013/10/3 8 2 12 12 completed
2013 10 3 2013/10/3 9 3 10 12 completed
2013 10 3 2013/10/3 10 4 13 12 cancelled_by_driver
Users_Id Banned Role
1 No client
2 Yes client
3 No client
4 No client
10 No driver
11 No driver
12 No driver
13 No driver

导入相关库

import pandas as pd 
  • 这一步很关键,必须导入对应的库才能进行后续的操作,因为我们会调用库里面的方法(可以理解为能进行特定操作的代码,并且是封装好了)
  • 后续可能还会使用到不同的库,调用其他的库也是用的import xx,然后pandas通常(规定)上都会缩写成pd,一方面比较方面书写,另一方面也方便阅读
  • pandas库是处理数据比较常用的库,主要是查看、修改、处理以及计算数据

读取数据

  • 一般来说数据大部分都是来自于本地的文件,通常是excel、csv文件,那么怎么能把本地的文件读取到python中进行分析呢
  • 这里就需要用到pd.read_XXX(文件类型)这个方法,常用的是pd.read_csv/pd.read_excel
  • 下面就讲解这两种方法怎么导入数据

一.读取excel文件:pd.read_excel

1.简单导入数据:只需要指定文件路径

  • 读取练习数据.xlsx文件,并将文件赋值给df_excel
df_excel = pd.read_excel("D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\练习数据.xlsx")
df_excel
df_excel = pd.read_excel("D://PythonFlie//python//pandas//pandas_exercise//exercise_data//练习数据.xlsx")
df_excel
  • 上面两种方式都会得到相同的数据
	year	month	day	date	Id	Client_Id	Driver_Id	City_Id	Status
0	2013	10	1	2013-10-01	1	1	10	1	completed
1	2013	10	1	2013-10-01	2	2	11	1	cancelled_by_driver
2	2013	10	1	2013-10-01	3	3	12	6	completed
3	2013	10	1	2013-10-01	4	4	13	6	cancelled_by_client
4	2013	10	2	2013-10-02	5	1	10	1	completed
5	2013	10	2	2013-10-02	6	2	11	6	completed
6	2013	10	2	2013-10-02	7	3	12	6	completed
7	2013	10	3	2013-10-03	8	2	12	12	completed
8	2013	10	3	2013-10-03	9	3	10	12	completed
9	2013	10	3	2013-10-03	10	4	13	12	cancelled_by_driver
  • 路径两种方式:一个是在路径前面加r,一个是将\换成//,主要是为了转义
df_excel = pd.read_excel("D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\练习数据.xlsx")
df_excel
  • 我尝试了一下没在路径前面加r,一样可以读取数据,难道是说python升级版本后可以这样子了?因为之前看视频以及书籍都是说的上面两种方法
  • 感觉真的是那句"温故而知新",代码的学习也是不断总结尝试的过程

2.指定sheet

  • 通常一个excel表格里面不止一个sheet,上面的方式默认导入第一个sheet里面的数据,如果我们需要导入其他sheet里面的数据应该怎么做呢
  • 利用的是sheet_name进行设置,默认第一个sheet为0,也可以写sheet名字来读取数据,这里需要注意一定要保证sheet的名字与excel表格中的名字一致,这里区分大小写
df_excel = pd.read_excel("D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\练习数据.xlsx",sheet_name = 1)
df_excel
df_excel = pd.read_excel("D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\练习数据.xlsx",sheet_name = "Users")
df_excel
  • 输出
Users_Id	Banned	Role
0	1	No	client
1	2	Yes	client
2	3	No	client
3	4	No	client
4	10	No	driver
5	11	No	driver
6	12	No	driver
7	13	No	driver

3.指定行索引

  • 将本地文件导入DataFrame时,行索引使用的从0开始的默认索引,可以通过设置index_col参数来设置将数据的第几列作为索引
    默认是从0开始的
  • 这种比较常见是把时间以及主键设置为索引比较合理一点
#将User表的第一列作为索引
df_excel = pd.read_excel("D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\练习数据.xlsx",sheet_name = 1
                         ,index_col = 0)
df_excel
  • 输出
Banned	Role
Users_Id		
1	No	client
2	Yes	client
3	No	client
4	No	client
10	No	driver
11	No	driver
12	No	driver
13	No	driver

4.指定列索引

  • 将本地文件导入DataFrame时,默认使用源数据表的第一行作为列索引,也可以通过设置header参数来设置列索引
  • 如果没有设置headerd的值默认为0 ,即将第一行作为列索引
  • 也可以设置为其他行,但该行以上的数据将会没有
#将第四行设置为列索引
df_excel = pd.read_excel("D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\练习数据.xlsx",sheet_name = "Sheet1"
                         ,header = 3 )
df_excel
  • 输出
client
0	driver
1	driver
2	driver
3	driver

5.指定导入列

  • 有的时候本地文件的列数太多,而我们又不需要那么多列时,我们就可以通过设定usecols参数来指定要导入的列。
  • 可以给usecols 参数以列表的形式传入多个值,表示要传入哪些列,同样是从0开始计数。
  • 也可以直接写列名
#只取第一个表的date、Client_Id、Driver_Id这三列
df_excel = pd.read_excel("D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\练习数据.xlsx"
                       ,usecols = [3,5,6])

df_excel
df_excel = pd.read_excel("D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\练习数据.xlsx"
                       ,usecols = ["date","Client_Id","Driver_Id"])

df_excel
  • 输出
	date	Client_Id	Driver_Id
0	2013-10-01	1	10
1	2013-10-01	2	11
2	2013-10-01	3	12
3	2013-10-01	4	13
4	2013-10-02	1	10
5	2013-10-02	2	11
6	2013-10-02	3	12
7	2013-10-03	2	12
8	2013-10-03	3	10
9	2013-10-03	4	13

6.指明读取行数

#只读取前两行数据
df_excel = pd.read_excel(r"D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\练习数据.xlsx"
                    ,nrows = 2)
df_excel
  • 输出
year	month	day	date	Id	Client_Id	Driver_Id	City_Id	Status
0	2013	10	1	2013-10-01	1	1	10	1	completed
1	2013	10	1	2013-10-01	2	2	11	1	cancelled_by_driver

7.将表格中的年月日合并成一列

df_excel = pd.read_excel("D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\练习数据.xlsx"
                         ,parse_dates = [[0,1,2]])
df_excel
  • 输出
year_month_day	date	Id	Client_Id	Driver_Id	City_Id	Status
0	2013-10-01	2013-10-01	1	1	10	1	completed
1	2013-10-01	2013-10-01	2	2	11	1	cancelled_by_driver
2	2013-10-01	2013-10-01	3	3	12	6	completed
3	2013-10-01	2013-10-01	4	4	13	6	cancelled_by_client
4	2013-10-02	2013-10-02	5	1	10	1	completed
5	2013-10-02	2013-10-02	6	2	11	6	completed
6	2013-10-02	2013-10-02	7	3	12	6	completed
7	2013-10-03	2013-10-03	8	2	12	12	completed
8	2013-10-03	2013-10-03	9	3	10	12	completed
9	2013-10-03	2013-10-03	10	4	13	12	cancelled_by_driver

总结

  • 1.路径名称
  • 2.sheet_name
  • 3.index_col设置行索引
  • 4.header设置列索引
  • 5.usecols设置导入的列
  • 6.nrows设置读取的行数
  • 7.parse_dates将事件分开的列设置成一列

二、读取csv文件:pd.read_excel

1.直接导入

  • 同导入excel文件一样,都可以采用下面三种方法导入
df_csv = pd.read_csv(r"D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\练习数据.csv")
df_csv
df_csv = pd.read_csv("D://PythonFlie//python//pandas//pandas_exercise//exercise_data//练习数据.csv")
df_csv
df_csv = pd.read_csv("D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\练习数据.csv")
df_csv

2.指明分隔符号

  • read_csv()默认文件中的数据都是以逗号分开的,但是有的文件不是用逗号分开的,这个时候就需要人为指定分隔符号,否则表格数据就会有问题。
  • 常见的分隔符有,(逗号)、\s+(任意的空白符,包括空格、制表符)
df_csv = pd.read_csv(r"D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\练习数据.csv"
                    ,sep = ",")
df_csv.head()

3.指定编码格式

  • 大家一定碰到过打开文件乱码的情况,这种一般都是文件的编码格式设置上的问题
  • python读取文件有时候也需要指定编码格式,用得比较多的两种编码格式是utf-8和gbk,默认编码格式是UTF-8。
  • 如果发现读出来的是乱码,可以尝试将encoding设置为"gbk"格式
df_csv = pd.read_csv(r"D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\second_cars_info.csv")
df_csv.head()
  • 输出
Brand	Name	Boarding_time	Km	Discharge	Sec_price	New_price
0	�µ�	�µ�A6L 2006�� 2.4 CVT ������	2006��8��	9.00����	��3	6.90	50.89��
1	�µ�	�µ�A6L 2007�� 2.4 CVT ������	2007��1��	8.00����	��4	8.88	50.89��
2	�µ�	�µ�A6L 2004�� 2.4L ����������	2005��5��	15.00����	��2	3.82	54.24��
3	�µ�	�µ�A8L 2013�� 45 TFSI quattro������	2013��10��	4.80����	ŷ4	44.80	101.06��
4	�µ�	�µ�A6L 2014�� 30 FSI ������	2014��9��	0.81����	��4,��5	33.19	54.99��
df_csv = pd.read_csv(r"D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\second_cars_info.csv"
                    ,encoding = "gbk")
df_csv.head()
  • 输出
Brand	Name	Boarding_time	Km	Discharge	Sec_price	New_price
0	奥迪	奥迪A6L 20062.4 CVT 舒适型	200689.00万公里	国3	6.90	50.891	奥迪	奥迪A6L 20072.4 CVT 舒适型	200718.00万公里	国4	8.88	50.892	奥迪	奥迪A6L 20042.4L 技术领先型	2005515.00万公里	国2	3.82	54.243	奥迪	奥迪A8L 201345 TFSI quattro舒适型	2013104.80万公里	欧4	44.80	101.064	奥迪	奥迪A6L 201430 FSI 豪华型	201490.81万公里	国4,5	33.19	54.99

总结

  • 读取csv文件同excel文件一样可以通过
    • 1.index_col设置行索引
    • 2.header设置列索引
    • 3.usecols设置导入的列
    • 4.nrows设置读取的行数
    • 5.parse_dates将事件分开的列设置成一列
  • 不同的是
    • 1.csv文件需要指明分隔符号,如果没有指明分隔符默认是逗号分隔
    • 2.csv文件需要指明编码格式,一般默认是utf-8,如果发现读出来的是乱码,可以尝试将encoding设置为"gbk"格式

三、读取data文件:pd.read_table

  • 通过做题发现还有一种data文件,读取的时候用到pd.read_table方法
  • 这种文件目前比较少,主要还是excel和csv文件比较多
data = pd.read_table(r"D:\PythonFlie\python\pandas\pandas_exercise\exercise_data\wind.data",sep = "\s+",parse_dates = [[0,1,2]])
data.head()
  • 输出
Yr_Mo_Dy	RPT	VAL	ROS	KIL	SHA	BIR	DUB	CLA	MUL	CLO	BEL	MAL
0	2061-01-01	15.04	14.96	13.17	9.29	NaN	9.87	13.67	10.25	10.83	12.58	18.50	15.04
1	2061-01-02	14.71	NaN	10.83	6.50	12.62	7.67	11.50	10.04	9.79	9.67	17.54	13.83
2	2061-01-03	18.50	16.88	12.33	10.13	11.17	6.17	11.25	NaN	8.50	7.67	12.75	12.71
3	2061-01-04	10.58	6.63	11.75	4.58	4.54	2.88	8.63	1.79	5.83	5.88	5.46	10.88
4	2061-01-05	13.33	13.25	11.42	6.17	10.71	8.21	11.92	6.54	10.92	10.34	12.92	11.83

查看数据与预处理

  • 通过查看相关数据情况后会对数据进行处理,比如是否存在缺失值(空值),是否需要删除、或者用其他值填充;是否存在重复值,是否需要删除

1.简单查看数据

#查看整个数据
df_excel
  • 输出
year	month	day	date	Id	Client_Id	Driver_Id	City_Id	Status
0	2013	10	1	2013-10-01	1	1	10	1	completed
1	2013	10	1	2013-10-01	2	2	11	1	cancelled_by_driver
2	2013	10	1	2013-10-01	3	3	12	6	completed
3	2013	10	1	2013-10-01	4	4	13	6	cancelled_by_client
4	2013	10	2	2013-10-02	5	1	10	1	completed
5	2013	10	2	2013-10-02	6	2	11	6	completed
6	2013	10	2	2013-10-02	7	3	12	6	completed
7	2013	10	3	2013-10-03	8	2	12	12	completed
8	2013	10	3	2013-10-03	9	3	10	12	completed
9	2013	10	3	2013-10-03	10	4	13	12	cancelled_by_driver
  • 上面的数据一共有10条数据,索引是从0-9,列索引分别是
  • year(年)、month(月)、day(日)、date(日期)、Id(订单id)、Client_Id(乘客id)、Driver_Id(司机id)、City_Id(城市id)、Status(状态)
  • 可以了解到这个数据讲的是每天出租车的行程信息,包含时间、订单完成情况、司机、乘客、城市信息
  • 上面整体数据量比较少,会全部显示出来,如果是存在几千条甚至上万条数据,通常都会将中间的数据省略掉,前后各显示5条数据
  • 当然也可以通过设置去显示所有的数据(但是隐约感觉没有这个必要)

2.查看数据前后N行(head/tail)

  • 使用head()查看前N行的数据,默认值为5;可以设置为负数,代表数据只读到倒数第N行;以设置查看的行数大于数据本身的行数,不会报错,只显示数据本身的数据
  • 使用tail()查看后N行的数据,默认值为5;同样也可以设置为负数以及超出数据本身的行数,设置为负数时,代表数据从数据最后读到正数第N行
df_excel.head()
  • 输出
year	month	day	date	Id	Client_Id	Driver_Id	City_Id	Status
0	2013	10	1	2013-10-01	1	1	10	1	completed
1	2013	10	1	2013-10-01	2	2	11	1	cancelled_by_driver
2	2013	10	1	2013-10-01	3	3	12	6	completed
3	2013	10	1	2013-10-01	4	4	13	6	cancelled_by_client
4	2013	10	2	2013-10-02	5	1	10	1	completed
#可以设置为负数,代表数据只读到倒数第N行
df_excel.head(-3)
  • 输出
year	month	day	date	Id	Client_Id	Driver_Id	City_Id	Status
0	2013	10	1	2013-10-01	1	1	10	1	completed
1	2013	10	1	2013-10-01	2	2	11	1	cancelled_by_driver
2	2013	10	1	2013-10-01	3	3	12	6	completed
3	2013	10	1	2013-10-01	4	4	13	6	cancelled_by_client
4	2013	10	2	2013-10-02	5	1	10	1	completed
5	2013	10	2	2013-10-02	6	2	11	6	completed
6	2013	10	2	2013-10-02	7	3	12	6	completed
#可以设置查看的行数大于数据本身的行数,不会报错,只显示数据本身的数据
df_excel.head(11)
  • 输出
year	month	day	date	Id	Client_Id	Driver_Id	City_Id	Status
0	2013	10	1	2013-10-01	1	1	10	1	completed
1	2013	10	1	2013-10-01	2	2	11	1	cancelled_by_driver
2	2013	10	1	2013-10-01	3	3	12	6	completed
3	2013	10	1	2013-10-01	4	4	13	6	cancelled_by_client
4	2013	10	2	2013-10-02	5	1	10	1	completed
5	2013	10	2	2013-10-02	6	2	11	6	completed
6	2013	10	2	2013-10-02	7	3	12	6	completed
7	2013	10	3	2013-10-03	8	2	12	12	completed
8	2013	10	3	2013-10-03	9	3	10	12	completed
9	2013	10	3	2013-10-03	10	4	13	12	cancelled_by_driver
df_excel.tail()
  • 输出
year	month	day	date	Id	Client_Id	Driver_Id	City_Id	Status
5	2013	10	2	2013-10-02	6	2	11	6	completed
6	2013	10	2	2013-10-02	7	3	12	6	completed
7	2013	10	3	2013-10-03	8	2	12	12	completed
8	2013	10	3	2013-10-03	9	3	10	12	completed
9	2013	10	3	2013-10-03	10	4	13	12	cancelled_by_driver
df_excel.tail(11)
  • 输出
year	month	day	date	Id	Client_Id	Driver_Id	City_Id	Status
0	2013	10	1	2013-10-01	1	1	10	1	completed
1	2013	10	1	2013-10-01	2	2	11	1	cancelled_by_driver
2	2013	10	1	2013-10-01	3	3	12	6	completed
3	2013	10	1	2013-10-01	4	4	13	6	cancelled_by_client
4	2013	10	2	2013-10-02	5	1	10	1	completed
5	2013	10	2	2013-10-02	6	2	11	6	completed
6	2013	10	2	2013-10-02	7	3	12	6	completed
7	2013	10	3	2013-10-03	8	2	12	12	completed
8	2013	10	3	2013-10-03	9	3	10	12	completed
9	2013	10	3	2013-10-03	10	4	13	12	cancelled_by_driver
df_excel.tail(-3)
  • 输出
	year	month	day	date	Id	Client_Id	Driver_Id	City_Id	Status
3	2013	10	1	2013-10-01	4	4	13	6	cancelled_by_client
4	2013	10	2	2013-10-02	5	1	10	1	completed
5	2013	10	2	2013-10-02	6	2	11	6	completed
6	2013	10	2	2013-10-02	7	3	12	6	completed
7	2013	10	3	2013-10-03	8	2	12	12	completed
8	2013	10	3	2013-10-03	9	3	10	12	completed
9	2013	10	3	2013-10-03	10	4	13	12	cancelled_by_driver

3.查看数据表的大小(shape)

  • 一般通过.shape来查看数据表的大小,返回的是元组类型
  • .shape[0]返回的是数据的行数,.shape[1]返回的是数据的列数
df_excel.shape
  • 输出
(10, 9)
#返回数据的行数
df_excel.shape[0]
  • 输出
10
#返回数据的列数
df_excel.shape[1]
  • 输出
9

4.查看数据表列名称(columns)

  • 通过.columns来返回数据表格整个列名称
df_excel.columns
  • 输出
Index(['year', 'month', 'day', 'date', 'Id', 'Client_Id', 'Driver_Id',
       'City_Id', 'Status'],
      dtype='object')

5.查看数据行索引(index)

  • .index来返回数据表格整个行索引
df_excel.index
  • 输出
RangeIndex(start=0, stop=10, step=1)

6.查看数据类型(info)

  • 这里一般使用的时info()方法,可以查看数据各个列的非空值的数量以及类型
df_excel.info()
  • 输出
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 9 columns):
 #   Column     Non-Null Count  Dtype         
---  ------     --------------  -----         
 0   year       10 non-null     int64         
 1   month      10 non-null     int64         
 2   day        10 non-null     int64         
 3   date       10 non-null     datetime64[ns]
 4   Id         10 non-null     int64         
 5   Client_Id  10 non-null     int64         
 6   Driver_Id  10 non-null     int64         
 7   City_Id    10 non-null     int64         
 8   Status     10 non-null     object        
dtypes: datetime64[ns](1), int64(7), object(1)
memory usage: 848.0+ bytes
  • 通过查看数据后会出现两种需求
    • 1.如果存在缺失值,哪些的位置的数据是缺失值
    • 2.修改数据类型,比如将year修改成时间类型等
  • 这些都将在后面会总结到

7.查看数据中的缺失值(isnull)

  • 方法一可以直接通过上面的.info()来查看缺失值,在non_null count里面会显示非空的数量
  • 方法二使用.isnull()可以显示该数值是否为空,若是空值则为True,若非空则为False
#输出显示数据表里面没有缺失值
df_excel.isnull()
  • 输出
year	month	day	date	Id	Client_Id	Driver_Id	City_Id	Status
0	False	False	False	False	False	False	False	False	False
1	False	False	False	False	False	False	False	False	False
2	False	False	False	False	False	False	False	False	False
3	False	False	False	False	False	False	False	False	False
4	False	False	False	False	False	False	False	False	False
5	False	False	False	False	False	False	False	False	False
6	False	False	False	False	False	False	False	False	False
7	False	False	False	False	False	False	False	False	False
8	False	False	False	False	False	False	False	False	False
9	False	False	False	False	False	False	False	False	False
#计算各列缺失值的数量
df_excel.isnull().sum()
  • 输出
year         0
month        0
day          0
date         0
Id           0
Client_Id    0
Driver_Id    0
City_Id      0
Status       0
dtype: int64
#计算各列非空值的数量
df_excel.shape[0] - df_excel.isnull().sum()
  • 输出
year         10
month        10
day          10
date         10
Id           10
Client_Id    10
Driver_Id    10
City_Id      10
Status       10
dtype: int64

8.删除缺失值(dropna)

  • 此删除会将整行数据进行删除,注意这里需要加上inplace=True,这样会将原来的df_excel的数据覆盖掉,即是不存在缺失值的数据
 #这里我们需要将设置成缺失值后在删除,需要用到numpy这里库,缺失值为np.nan
import numpy as np
df_excel["Status"][0] = np.nan
df_excel
  • 输出
	year	month	day	date	Id	Client_Id	Driver_Id	City_Id	Status
0	2013	10	1	2013-10-01	1	1	10	1	NaN
1	2013	10	1	2013-10-01	2	2	11	1	cancelled_by_driver
2	2013	10	1	2013-10-01	3	3	12	6	completed
3	2013	10	1	2013-10-01	4	4	13	6	cancelled_by_client
4	2013	10	2	2013-10-02	5	1	10	1	completed
5	2013	10	2	2013-10-02	6	2	11	6	completed
6	2013	10	2	2013-10-02	7	3	12	6	completed
7	2013	10	3	2013-10-03	8	2	12	12	completed
8	2013	10	3	2013-10-03	9	3	10	12	completed
9	2013	10	3	2013-10-03	10	4	13	12	cancelled_by_driver
#对缺失值进行删除,此删除会将整行数据进行删除,注意这里需要加上inplace=True,这样会将原来的df_excel的数据覆盖掉
#即是不存在缺失值的数据
df_excel.dropna(inplace=True)
df_excel
  • 输出
year	month	day	date	Id	Client_Id	Driver_Id	City_Id	Status
1	2013	10	1	2013-10-01	2	2	11	1	cancelled_by_driver
2	2013	10	1	2013-10-01	3	3	12	6	completed
3	2013	10	1	2013-10-01	4	4	13	6	cancelled_by_client
4	2013	10	2	2013-10-02	5	1	10	1	completed
5	2013	10	2	2013-10-02	6	2	11	6	completed
6	2013	10	2	2013-10-02	7	3	12	6	completed
7	2013	10	3	2013-10-03	8	2	12	12	completed
8	2013	10	3	2013-10-03	9	3	10	12	completed
9	2013	10	3	2013-10-03	10	4	13	12	cancelled_by_driver

9.填充缺失值(fillna)

  • 这里同样需要加上inplace=True
df_excel.fillna(1,inplace=True)
df_excel
  • 输出
	year	month	day	date	Id	Client_Id	Driver_Id	City_Id	Status
0	2013	10	1	2013-10-01	1	1	10	1	1
1	2013	10	1	2013-10-01	2	2	11	1	cancelled_by_driver
2	2013	10	1	2013-10-01	3	3	12	6	completed
3	2013	10	1	2013-10-01	4	4	13	6	cancelled_by_client
4	2013	10	2	2013-10-02	5	1	10	1	completed
5	2013	10	2	2013-10-02	6	2	11	6	completed
6	2013	10	2	2013-10-02	7	3	12	6	completed
7	2013	10	3	2013-10-03	8	2	12	12	completed
8	2013	10	3	2013-10-03	9	3	10	12	completed
9	2013	10	3	2013-10-03	10	4	13	12	cancelled_by_driver

10.查看数值分布情况(describe)

  • 通过describe可以查看非数值型数据的数量、中位数、标准差、四分位数、最大值、最小值等情况
df_excel.describe()
  • 输出
	year	month	day	Id	Client_Id	Driver_Id	City_Id
count	10.0	10.0	10.000000	10.00000	10.000000	10.000000	10.000000
mean	2013.0	10.0	1.900000	5.50000	2.500000	11.400000	6.300000
std	0.0	0.0	0.875595	3.02765	1.080123	1.173788	4.498148
min	2013.0	10.0	1.000000	1.00000	1.000000	10.000000	1.000000
25%	2013.0	10.0	1.000000	3.25000	2.000000	10.250000	2.250000
50%	2013.0	10.0	2.000000	5.50000	2.500000	11.500000	6.000000
75%	2013.0	10.0	2.750000	7.75000	3.000000	12.000000	10.500000
max	2013.0	10.0	3.000000	10.00000	4.000000	13.000000	12.000000

11.查看数值唯一值情况(unique)

df_excel.nunique()
  • 输出
year          1
month         1
day           3
date          3
Id           10
Client_Id     4
Driver_Id     4
City_Id       3
Status        3
dtype: int64

12.重复值的处理(drop_duplicates)

  • 在Python中我们利用drop_duplicates()方法,该方法默认对所有值进行重复值判断,且默认保留第一个(行)值
  • 同样也可以用inplace=True来替换原来的df_excel
df_excel.drop_duplicates()
  • 输出
	year	month	day	date	Id	Client_Id	Driver_Id	City_Id	Status
0	2013	10	1	2013-10-01	1	1	10	1	1
1	2013	10	1	2013-10-01	2	2	11	1	cancelled_by_driver
2	2013	10	1	2013-10-01	3	3	12	6	completed
3	2013	10	1	2013-10-01	4	4	13	6	cancelled_by_client
4	2013	10	2	2013-10-02	5	1	10	1	completed
5	2013	10	2	2013-10-02	6	2	11	6	completed
6	2013	10	2	2013-10-02	7	3	12	6	completed
7	2013	10	3	2013-10-03	8	2	12	12	completed
8	2013	10	3	2013-10-03	9	3	10	12	completed
9	2013	10	3	2013-10-03	10	4	13	12	cancelled_by_driver
  • 上面是针对所有字段进行的重复值判断,我们同样也可以只针对某一列或某几列进行重复值删除的判断,只需要在drop_duplicates()方法中指明要判断的列名即可。
df_excel.drop_duplicates(subset="Client_Id")
  • 输出
year	month	day	date	Id	Client_Id	Driver_Id	City_Id	Status
0	2013	10	1	2013-10-01	1	1	10	1	1
1	2013	10	1	2013-10-01	2	2	11	1	cancelled_by_driver
2	2013	10	1	2013-10-01	3	3	12	6	completed
3	2013	10	1	2013-10-01	4	4	13	6	cancelled_by_client
df_excel.drop_duplicates(subset=["Client_Id","Driver_Id"])
  • 输出
year	month	day	date	Id	Client_Id	Driver_Id	City_Id	Status
0	2013	10	1	2013-10-01	1	1	10	1	1
1	2013	10	1	2013-10-01	2	2	11	1	cancelled_by_driver
2	2013	10	1	2013-10-01	3	3	12	6	completed
3	2013	10	1	2013-10-01	4	4	13	6	cancelled_by_client
7	2013	10	3	2013-10-03	8	2	12	12	completed
8	2013	10	3	2013-10-03	9	3	10	12	completed
  • 还可以自定义删除重复项时保留哪个,默认保留第一个,也可以设置保留最后一个,或者全部不保留。
  • 通过传入参数keep进行设置,参数keep默认值是first,即保留第一个值;也可以是last,保留最后一个值;还可以是False,即把重复值全部删除。
df_excel.drop_duplicates(subset=["Client_Id","Driver_Id"],keep = "last")
  • 输出
year	month	day	date	Id	Client_Id	Driver_Id	City_Id	Status
4	2013	10	2	2013-10-02	5	1	10	1	completed
5	2013	10	2	2013-10-02	6	2	11	6	completed
6	2013	10	2	2013-10-02	7	3	12	6	completed
7	2013	10	3	2013-10-03	8	2	12	12	completed
8	2013	10	3	2013-10-03	9	3	10	12	completed
9	2013	10	3	2013-10-03	10	4	13	12	cancelled_by_driver
df_excel.drop_duplicates(subset=["Client_Id","Driver_Id"],keep = False)
  • 输出
year	month	day	date	Id	Client_Id	Driver_Id	City_Id	Status
7	2013	10	3	2013-10-03	8	2	12	12	completed
8	2013	10	3	2013-10-03	9	3	10	12	completed

你可能感兴趣的:(#,python,数据分析)