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

不知道有没有小伙伴跟我一样,之前也断断续续学习过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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球