不知道有没有小伙伴跟我一样,之前也断断续续学习过python相关的知识,可是迟迟就是入不了门,开始是出现了问题,不知道怎么解决问题,动不动就是入门到放弃;后续是认认真真看视频,认认真真“复制”代码,可是还是没学懂,后续发现学习都还是一点一滴的来的,最开始就要从最最最简单的东西开始,从自己熟悉的东西入手,而不是看一些复杂的代码,从懂一行代码开始,再到后续慢慢学会看复杂的代码
数据文件下面的内容基于《对比excel,轻松学习python数据分析》这本书以及《这十套练习,教你如何用Pandas做数据分析》这个练习做的一点点总结,后续发现关于python的数据的处理也是有一套流程的;后面如果发现一些用法也会不断补充在这里面滴~
- 可能会有小伙伴问数据在哪里查到,下面的数据小伙伴可以自行创建在对应的文件夹下面,数据量就只有十几条,是比较方便创建的
- 当然也可以用自己的数据文件
- 注意文件的格式一个是excel表格,一个是csv
- 目前一共有两个表格一个叫Trips(上),一个叫Users(下)
import pandas as pd
- 这一步很关键,必须导入对应的库才能进行后续的 *** 作,因为我们会调用库里面的方法(可以理解为能进行特定 *** 作的代码,并且是封装好了)
- 后续可能还会使用到不同的库,调用其他的库也是用的import xx,然后pandas通常(规定)上都会缩写成pd,一方面比较方面书写,另一方面也方便阅读
- pandas库是处理数据比较常用的库,主要是查看、修改、处理以及计算数据
- 一般来说数据大部分都是来自于本地的文件,通常是excel、csv文件,那么怎么能把本地的文件读取到python中进行分析呢
- 这里就需要用到pd.read_XXX(文件类型)这个方法,常用的是pd.read_csv/pd.read_excel
- 下面就讲解这两种方法怎么导入数据
- 读取练习数据.xlsx文件,并将文件赋值给df_excel
df_excel = pd.read_excel("D:PythonFliepythonpandaspandas_exerciseexercise_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:PythonFliepythonpandaspandas_exerciseexercise_data练习数据.xlsx") df_excel
- 我尝试了一下没在路径前面加r,一样可以读取数据,难道是说python升级版本后可以这样子了?因为之前看视频以及书籍都是说的上面两种方法
- 感觉真的是那句"温故而知新",代码的学习也是不断总结尝试的过程
- 通常一个excel表格里面不止一个sheet,上面的方式默认导入第一个sheet里面的数据,如果我们需要导入其他sheet里面的数据应该怎么做呢
- 利用的是sheet_name进行设置,默认第一个sheet为0,也可以写sheet名字来读取数据,这里需要注意一定要保证sheet的名字与excel表格中的名字一致,这里区分大小写
df_excel = pd.read_excel("D:PythonFliepythonpandaspandas_exerciseexercise_data练习数据.xlsx",sheet_name = 1) df_excel
df_excel = pd.read_excel("D:PythonFliepythonpandaspandas_exerciseexercise_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 driver3.指定行索引
- 将本地文件导入Dataframe时,行索引使用的从0开始的默认索引,可以通过设置index_col参数来设置将数据的第几列作为索引
默认是从0开始的 - 这种比较常见是把事件以及主键设置为索引比较合理一点
#将User表的第一列作为索引 df_excel = pd.read_excel("D:PythonFliepythonpandaspandas_exerciseexercise_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 driver4.指定列索引
- 将本地文件导入Dataframe时,默认使用源数据表的第一行作为列索引,也可以通过设置header参数来设置列索引
- 如果没有设置headerd的值默认为0 ,即将第一行作为列索引
- 也可以设置为其他行,但该行以上的数据将会没有
#将第四行设置为列索引 df_excel = pd.read_excel("D:PythonFliepythonpandaspandas_exerciseexercise_data练习数据.xlsx",sheet_name = "Sheet1" ,header = 3 ) df_excel
- 输出
client 0 driver 1 driver 2 driver 3 driver5.指定导入列
- 有的时候本地文件的列数太多,而我们又不需要那么多列时,我们就可以通过设定usecols参数来指定要导入的列。
- 可以给usecols 参数以列表的形式传入多个值,表示要传入哪些列,同样是从0开始计数。
- 也可以直接写列名
#只取第一个表的date、Client_Id、Driver_Id这三列 df_excel = pd.read_excel("D:PythonFliepythonpandaspandas_exerciseexercise_data练习数据.xlsx" ,usecols = [3,5,6]) df_excel
df_excel = pd.read_excel("D:PythonFliepythonpandaspandas_exerciseexercise_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 136.指明读取行数
#只读取前两行数据 df_excel = pd.read_excel(r"D:PythonFliepythonpandaspandas_exerciseexercise_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_driver7.将表格中的年月日合并成一列
df_excel = pd.read_excel("D:PythonFliepythonpandaspandas_exerciseexercise_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将事件分开的列设置成一列
- 同导入excel文件一样,都可以采用下面三种方法导入
df_csv = pd.read_csv(r"D:PythonFliepythonpandaspandas_exerciseexercise_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:PythonFliepythonpandaspandas_exerciseexercise_data练习数据.csv") df_csv2.指明分隔符号
- read_csv()默认文件中的数据都是以逗号分开的,但是有的文件不是用逗号分开的,这个时候就需要人为指定分隔符号,否则表格数据就会有问题。
- 常见的分隔符有,(逗号)、s+(任意的空白符,包括空格、制表符)
df_csv = pd.read_csv(r"D:PythonFliepythonpandaspandas_exerciseexercise_data练习数据.csv" ,sep = ",") df_csv.head()3.指定编码格式
- 大家一定碰到过打开文件乱码的情况,这种一般都是文件的编码格式设置上的问题
- python读取文件有时候也需要指定编码格式,用得比较多的两种编码格式是utf-8和gbk,默认编码格式是UTF-8。
- 如果发现读出来的是乱码,可以尝试将encoding设置为"gbk"格式
df_csv = pd.read_csv(r"D:PythonFliepythonpandaspandas_exerciseexercise_datasecond_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:PythonFliepythonpandaspandas_exerciseexercise_datasecond_cars_info.csv" ,encoding = "gbk") 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万总结
- 读取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方法
- 这种文件目前比较少,主要还是excel和csv文件比较多
data = pd.read_table(r"D:PythonFliepythonpandaspandas_exerciseexercise_datawind.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查看数据与预处理
- 通过查看相关数据情况后会对数据进行处理,比如是否存在缺失值(空值),是否需要删除、或者用其他值填充;是否存在重复值,是否需要删除
#查看整个数据 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条数据
- 当然也可以通过设置去显示所有的数据(但是隐约感觉没有这个必要)
- 使用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_driver3.查看数据表的大小(shape)
- 一般通过.shape来查看数据表的大小,返回的是元组类型
- .shape[0]返回的是数据的行数,.shape[1]返回的是数据的列数
df_excel.shape
- 输出
(10, 9)
#返回数据的行数 df_excel.shape[0]
- 输出
10
#返回数据的列数 df_excel.shape[1]
- 输出
94.查看数据表列名称(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()
- 输出
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修改成时间类型等
- 这些都将在后面会总结到
- 方法一可以直接通过上面的.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: int648.删除缺失值(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_driver9.填充缺失值(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_driver10.查看数值分布情况(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.00000011.查看数值唯一值情况(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: int6412.重复值的处理(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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)