不知道有没有小伙伴跟我一样,之前也断断续续学习过python相关的知识,可是迟迟就是入不了门,开始是出现了问题,不知道怎么解决问题,动不动就是入门到放弃;后续是认认真真看视频,认认真真”复制”代码,可是还是没学懂,后续发现学习都还是一点一滴的来的,最开始就要从最最最简单的东西开始,从自己熟悉的东西入手,而不是看一些复杂的代码,从懂一行代码开始,再到后续慢慢学会看复杂的代码
下面的内容基于《对比excel,轻松学习python数据分析》这本书以及《这十套练习,教你如何用Pandas做数据分析》这个练习做的一点点总结,后续发现关于python的数据的处理也是有一套流程的;后面如果发现一些用法也会不断补充在这里面滴~
数据文件
- 可能会有小伙伴问数据在哪里查到,下面的数据小伙伴可以自行创建在对应的文件夹下面,数据量就只有十几条,是比较方便创建的
- 当然也可以用自己的数据文件
- 注意文件的格式一个是excel表格,一个是csv
- 目前一共有两个表格一个叫Trips(上),一个叫Users(下)
yearmonthdaydateIdClient_IdDriver_IdCity_IdStatus20131012013/10/111101completed20131012013/10/122111cancelled_by_driver20131012013/10/133126completed20131012013/10/144136cancelled_by_client20131022013/10/251101completed20131022013/10/262116completed20131022013/10/273126completed20131032013/10/3821212completed20131032013/10/3931012completed20131032013/10/31041312cancelled_by_driver Users_IdBannedRole1Noclient2Yesclient3Noclient4Noclient10Nodriver11Nodriver12Nodriver13Nodriver
导入相关库
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开始的 - 这种比较常见是把时间以及主键设置为索引比较合理一点
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开始计数。
- 也可以直接写列名
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 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
- 通过做题发现还有一种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
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()
- 输出
`python
RangeIndex: 10 entries, 0 to 9
Data columns (total 9 columns):
Original: https://blog.csdn.net/weixin_43816759/article/details/121264956
Author: hannah2sah
Title: pandas学习汇总(关于怎样处理数据与分析)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/741055/
转载文章受原作者版权保护。转载请注明原作者出处!