Python数据分析入门笔记2——pandas数据读取

Python数据分析入门笔记2——pandas数据读取,第1张

Python数据分析入门笔记2——pandas数据读取 系列文章目录

Python数据分析入门笔记1——学习前的准备

Python数据分析入门笔记

系列文章目录前言一、用pandas读取文件

1. 从CSV和TXT文件中读取数据2.从Excel文件中读取数据 二、用pandas解析数据

1.pandas三大结构介绍2.Dataframe的常用属性和方法(Series类似不表)3.Dataframe中的条件查找——布尔索引4.Dataframe的修改(暂时不需要,先忽略)5.Dataframe的分组和聚合 三、小测验(答案放到下一篇博客末尾)总结


前言

快速入门pandas,认识pandas三大结构Series、Dataframe和Panel中的前两种,知道读取文件,并且按行或者按列有选择性地查找数据。


一、用pandas读取文件

pandas可以读取CSV和TXT文件中的数据,可以获取Excel、JSON、HTML、Word和PDF文件中的数据,也可以从数据库中获取数据。这里只列出常用的CSV和TXT文件、Excel文件的读取方法。

1. 从CSV和TXT文件中读取数据

csv是一种逗号分隔的文件格式,但其分隔符不一定是逗号。可用记事本或excel打开。
csv文件使用read_csv()函数来读取。
最简单的举例:

import pandas as pd
#注意:如果文件中包含中文,必须加上encoding
data = pd.read_csv('d://分省份GDP数据.csv', encoding='gbk')
print(data.columns)#返回所有的列名对象,相当于字典的键名,默认把第0行作为列名
print(data.values)#返回所有的行

read_csv()函数语法格式如下,参数说明如下表所示。

pandas.read_csv(filepath_or_buffer, sep=’,’, header=‘infer’, names=None, index_col=None, dtype=None, engine=None,nrows=None,encoding=None)

序号参数说明1filepath接收string,代表文件路径,无默认。2sep接收string,代表分隔符。read_csv默认为“,”,read_table默认为制表符“Tab”。3header接收int或sequence,表示将某行数据作为列名。默认为infer,表示自动识别。4names接收array,表示列名。默认为None。5index_col接收int、sequence或False,代表索引列的位置,取值为sequence代表为多重索引。6dtype接收dict,代表写入的数据类型(列名 为key,数据格式为values)。默认为None。7engine接收c或者Python,代表数据解析引擎。默认为c。8nrows接收int,表示读取前n行。

尚待解决的问题:

  • sequence多重索引有何作用,如何创建多重索引,如何体现为多重索引?
  • read_table()函数何时使用?如何使用?
  • dtype有何作用? 2.从Excel文件中读取数据

    Pandas提供了read_excel()函数来读取“xls”和“xlsx”两种Excel文件。
    最简单的举例:

    import pandas as pd
    #注意read_excel方法中没有encoding参数
    df=pd.read_excel("D://Projects/2019年底江苏省A级景区名录.xlsx",sheet_name=0,index_col=0)
    print(df.columns)#返回所有的列名对象,相当于字典的键名,默认把第0行作为列名
    print(df.values)#返回所有的行
    

    read_excel()函数语法格式如下,参数说明如下表所示。

    pandas.read_excel( filepath, sheetname=0, header=0, names=None, index_col=None, dtype=None ,nrows=None)

    序号参数说明1filepath接收string,代表文件路径,无默认。2sheetname接收string、int,代表Excel表内数据的分表位置。默认为0。3header接收int或sequence,表示将某行数据作为列名。默认为infer,表示自动识别。4names接收array,表示列名。默认为None。5index_col接收int、sequence或False,代表索引列的位置,取值为sequence代表为多重索引。6dtype接收dict,代表写入的数据类型(列名 为key,数据格式为values)。默认为None。 二、用pandas解析数据 1.pandas三大结构介绍

    Series(系列)

    一维数组,与NumPy中的一维array类似。Series可以保存不同数据类型,如字符串、boolean值、数字等。如果传入的数据类型不统一,最终的dtype通常是object。 Dataframe(数据帧)

    二维的表格型数据结构,可以将Dataframe理解为Series的容器。(类似Excel的工作表吗?)Dataframe的单列数据为一个Series。 Panel(面板)

    三维的数组,可以理解为Dataframe的容器。(类似Excel的工作簿吗?)内置了十几种数据源读取函数和对应的数据写入函数。 2.Dataframe的常用属性和方法(Series类似不表)

    Dataframe是最常用的Pandas对象,类似于Office Excel表格。完成数据读取后,数据就以Dataframe数据结构存储在内存中。但此时并不能直接开始统计分析工作,需要使用Dataframe的属性与方法对数据的分布、大小等进行 *** 作。
    假设有一个Dataframe名为df,且数据如下:

    学号姓名性别年龄住址S1张三男15NaNS2李四男16NaNS3王五女15NaNS4赵六男14NaN

    (1)假设我读取的时候,不指定行索引,参考代码如下:

    import pandas as pd	#导入pandas库
    df=pd.read_csv("D://Projects/示例.csv",encoding="gbk")	#以中文编码形式读取D盘Projects文件夹下的“示例.csv”文件
    
    

    则属性与方法说明如下:

    代码格式功能代码示例结果df.values返回ndarray类型的对象df.valuesindex获取行索引df.indexRangeIndex(start=0, stop=4, step=1)
    说明:由于直接从csv文件中读取数据,未设置行索引,所以会认为csv文件没有行索引,会从0开始递增添加索引。columns获取列索引df.columnsIndex([‘学号’, ‘姓名’, ‘性别’, ‘年龄’, ‘住址’], dtype=‘object’)shape数据形状(即行数、列数)df.shape(4, 5)
    说明:即4行数据,一共5列ndim获取维度df.ndim2
    说明:即数据是二维的size元素个数(即行数*列数)df.size20
    说明:4行5列所以一共20个元素loc[行索引名称或条件,列索引名称]按索引名称返回元素df.loc[‘S1’,‘性别’]男iloc[ 行索引位置,列索引位置 ]按序值返回元素df.iloc[1,1]'李四’
    说明:行号列号都从0开始,所以[1,1]取的是第二行第二列的数据,也就是李四axes获取行及列索引df.axes[RangeIndex(start=0, stop=4, step=1),
    Index([‘学号’, ‘姓名’, ‘性别’, ‘年龄’, ‘住址’], dtype=‘object’)]df.T行与列对调df.Tinfo()打印Dataframe对象的信息df.info()head(i)显示前 i 行数据df.head(2)tail(i)显示后 i 行数据df.tail(2)describe()获取二维数据基本统计值,如计数count,平均数mean,标准差std,最小值min,最大值max等df.describe()value_counts()用来查看数据表中,指定列里有多少个不同的数据值,并计算每个不同值有在该列中的个数,同时还能根据需要进行排序df[‘性别’].value_counts()count()统计非空值数量df.count()
    #统计Dataframe中各列非空值的数量,方便对空值进行处理

    (2)假设我读取的时候设置了行索引,参考代码如下:

    import pandas as pd	#导入pandas库
    #index_col=0,代表将数据的第一列“学号”作为行索引,也就是根据学号可以唯一地找到这一行。
    #但设置行索引以后,再用values、size输出会得到不一样的结果。为什么?
    df=pd.read_csv("D://Projects/示例.csv",encoding="gbk",index_col=0)
    

  • Dataframe中的数据切片,如前十个数据,后十个数据,第十到第二十行数据都如何表达?
  • 行索引值设置以后,为什么索引就不算做数据列了? 3.Dataframe中的条件查找——布尔索引
    #使用布尔索引获取部分数据行,df['年龄']>df['年龄'].mean()的意思是年龄值大于平均值
    df[df['年龄']>df['年龄'].mean()]
    

    执行结果:

    4.Dataframe的修改(暂时不需要,先忽略)
      修改列名、行索引名列的添加append、删除drop和插入insert
    5.Dataframe的分组和聚合

    按某一列来分组:groupby(‘用来分组的列名’)
    按多列来分组:groupby([‘列名1’,‘列名2’,‘列名3’])

    df.groupby('性别')#按性别分组
    df.groups	#查看分组,输出结果{'女': ['S3'], '男': ['S1', 'S2', 'S4']}
    df.groupby(['性别','年龄']) #按性别和年龄组合来分组,性别和年龄都相同的才会分到同一组
    df.groups	#查看分组,输出结果{('女', 15): ['S3'], ('男', 14): ['S4'], ('男', 15): ['S1'], ('男', 16): ['S2']}
    
    三、小测验(答案放到下一篇博客末尾)

    有如下excel文档“2019年底江苏省A级景区名录.xlsx”,完成以下任务:
    文档下载地址:2019年底江苏省A级景区名录.xlsx

      用pandas的read_excel()方法读取这个文件,并将第一列序号作为行索引,并输出文件内容

      用columns获取列索引,即输出表头

      统计各市入选的景点个数,输出结果如图:

      按所在地市进行分组,分别统计4A、3A、2A景区的数量,部分输出结果如图所示:

      按景区等级分组,分别统计各等级中各地市的分布情况。部分输出结果如图:

      欢迎补充其他应用场景!


    总结
      pandas读取csv和excel文件通过Dataframe查看数据,多种查看方式

    欢迎分享,转载请注明来源:内存溢出

    原文地址: https://outofmemory.cn/zaji/5716407.html

  • (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022-12-17
    下一篇 2022-12-17

    发表评论

    登录后才能评论

    评论列表(0条)

    保存