Pandas入门指南(Python数据分析第一课)

文章目录

  • 安装
  • 设定系统环境
  • Series对象创建
  • DataFrame对象创建
  • Pandas中的Index
  • 导入Excel文件
  • 导入csv文件
  • 导入txt文件
  • 保存数据
  • 保存数据至外部文件
  • 了解数据
  • head()与 tail()
  • info()
  • shape
  • describe()
  • 列操作
  • 修改变量列
  • 筛选变量列
  • 删除变量列
  • 添加变量列
  • 根据新数据添加
  • 根据原数据添加

  • Pandas 是一个开源的 Python 数据分析库,它提供了快速、灵活和富有表达力的数据结构,旨在使“关系”或“标签”数据的处理既简单又直观。它旨在成为高级数据分析和操作的高级构建块。Pandas 的名字来源于“panel data”(面板数据)和“python data analysis”(Python 数据分析)的缩写。

    Pandas已经成为了Python 进行数据分析和挖掘时的数据基础平台和事实上的工业准。

    使用 Pandas 包完成数据读入、数据清理、数据准备、图表呈现等工作,为继续学习数据建模和数据挖掘打下坚实基础。

    安装

    pip install pandas
    

    设定系统环境

    import pandas as pd
    #设定自由列表输出最多为 10 行(可以根据需要去设定)
    pd.options.display.max_rows = 10
    # 显示当前 Pandas 版本号
    pd.__version__
    

    Series对象创建

    Series:一维数组,与Numpy中的一维array类似。它是一种类似于一维数组的对象,是由一组数据(各种 NumPy 数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的Series 对象。用值列表生成 Series 时,Pandas 默认自动生成整数索引

    【示例】使用列表创建

    data=pd.Series([4,3,5,6,1])
    data
    '''
    0    4
    1    3
    2    5
    3    6
    4    1
    dtype: int64
    '''
    

    pandas中两个重要的属性 values 和index,**values:**是Series对象的原始数据。**index:**对应了Series对象的索引对象
    【示例】属性values和index

    data.values  # array([4, 3, 5, 6, 1])
    data.index   # RangeIndex(start=0, stop=5, step=1)
    

    【示例】指定index

    data=pd.Series([5,4,6,3,1],index=['one','two','three','four','five'])
    '''
    one      5
    two      4
    three    6
    four     3
    five     1
    dtype: int64
    '''
    

    【示例】使用list列表指定index

    data=pd.Series([4,3,2,1],index=list('abcd'))
    '''
    a    4
    b    3
    c    2
    d    1
    dtype: int64
    '''
    

    【示例】传入字典创建,默认将key作为index

    population_dict={'sh':2800,'bj':3000,'gz':1500,'sz':1200}
    population_series=pd.Series(population_dict)
    '''
    sh    2800
    bj    3000
    gz    1500
    sz    1200
    dtype: int64
    '''
    

    【示例】如果既用了字典创建了Series对象,又显示的指定了index,如果key不存在,则值为NaN

    #如果存在取交集
    sub_series=pd.Series(population_dict,index=['bj','sh'])
    #如果不存在则值为NaN
    sub_series=pd.Series(population_dict,index=['bj','xa'])
    '''
    bj    3000.0
    xa       NaN
    dtype: float64
    '''
    

    【示例】将一个标量与index对象一起传入创建

    data=pd.Series(10,index=list('abcd'))
    '''
    a    10
    b    10
    c    10
    d    10
    dtype: int64
    '''
    

    DataFrame对象创建

    DataFrame 是 Pandas 中的一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame 即有行索引也有列索引,可以被看做是由 Series 组成的字典。将两个series对象作为dict的value传入,就可以创建一个DataFrame对象。
    【示例】创建DataFrame对象

    population_dict={'beijing':3000,'shanghai':1200,'guangzhou':1800}
    area_dict={'beijing':300,'shanghai':180,'guangzhou':200}
    population_series=pd.Series(population_dict)
    area_series=pd.Series(area_dict)
    citys=pd.DataFrame({'area':area_series,'population':population_series})
    print(citys)
    '''
    	        area  population
    beijing	     300	    3000
    shanghai	 180	    1200
    guangzhou	 200	    1800
    '''
    

    【示例】values index columns属性

    citys.index   # Index(['beijing', 'shanghai', 'guangzhou'],dtype='object')
    citys.values  
    '''
    array([[ 300, 3000],
           [ 180, 1200],
           [ 200, 1800]])
    '''
    citys.columns  # Index(['area', 'population'], dtype='object')
    

    【示例】列表创建

    population_dict={'beijing':3000,'shanghai':1200,'guangzhou':1800}
    area_dict={'beijing':300,'shanghai':180,'guangzhou':200}
    data=pd.DataFrame([population_dict,area_dict])
    #添加index属性
    data=pd.DataFrame([population_dict,area_dict],index=['population','area'])
    '''
                beijing  shanghai  guangzhou
    population     3000      1200       1800
    area            300       180        200
    '''
    

    【示例】索引columns的使用

    population_series=pd.Series(population_dict)
    pd.DataFrame(population_series,columns=['population'])
    '''
    	       population
    beijing	         3000
    shanghai	     1200
    guangzhou	     1800
    '''
    

    【示例】二维数组指定columns和index创建

    pd.DataFrame(np.random.randint(0,10(3,2)),columns=list('ab'),index=list('efg'))
    '''
    	a	b
    e	2	0
    f	2	5
    g	7	8
    '''
    

    Pandas中的Index

    Pandas中的Index,其实是不可变的一维数组

    ind=pd.Index([3,4,5,6,7])  # Index([3, 4, 5, 6, 7], dtype='int64')
    #根据下标获取值
    ind[3]   # np.int64(6)
    #切片获取值
    ind[::2]  # Index([3, 5, 7], dtype='int64')
    #有ndim shap dtype size属性
    #但不能进行修改
    ind[3]=20  # TypeError: Index does not support mutable operations
    

    导入Excel文件

    使用read_excel()方法导入文件,首先要指定文件的路径。

  • 说明——使用Pandas模块操作Excel时候,需要安装openpyxl
  • pd.read_excel('stu_data.xlsx')
    

    【示例】导入.xlsx文件时,指定导入哪个Sheet

    pd.read_excel('stu_data.xlsx',sheet_name='Target')
    pd.read_excel('stu_data.xlsx',sheet_name=0)
    

    【示例】导入.xlsx文件时,通过index_col指定行索引

    pd.read_excel('stu_data.xlsx',sheet_name=0,index_col=0)
    

    【示例】导入.xlsx文件时,通过header指定列索引

    pd.read_excel('stu_data.xlsx',sheet_name=0,header=1)
    pd.read_excel('stu_data.xlsx',sheet_name=0,header=None)
    

    有时候本地文件的列数太多,而我们又不需要那么多列时,我们就可以通过设置usecols参数来指定要导入的列。
    【示例】导入.xlsx文件时,通过usecols指定导入列

    # 导入1,2,3列
    pd.read_excel('stu_data.xlsx',usecols=[1,2,3])
    

    导入csv文件

    导入csv文件时除了指明文件路径,还需要设置编码格式。Python中用得比较多的两种编码格式是UTF-8gbk默认编码格式是UTF-8。我们要根据导入文件本身的编码格式进行设置,通过设置参数encoding来设置导入的编码格式。

    【示例】导入.csv文件,文件编码格式是gbk

    pd.read_csv('stu_data.csv',encoding='gbk')
    

    用分隔符号进行分隔。常用的分隔符除了逗号、空格,还有制表符(\t)。

    【示例】导入.csv文件,指明分隔符

    df = pd.read_csv("stu_data.csv",encoding='gbk',sep=' ')
    pd.read_csv('stu_data.csv',encoding='gbk',sep=',')
    

    导入txt文件

    导入.txt文件用得方法时read_table(),read_table()是将利用分隔符分开的文件导入。DataFrame的通用函数。它不仅仅可以导入.txt文件,还可以导入.csv文件。

    【示例】导入.txt文件

    pd.read_table('test_data.txt',encoding='utf-8',sep='\t')
    

    【示例】导入.csv文件,指明分隔符

    pd.read_table('stu_data.csv',encoding='gbk',sep=',')
    

    保存数据

    保存数据至外部文件

    df.to_csv(
        filepath_or_buffer :要保存的文件路径
        sep =:分隔符
        columns :需要导出的变量列表
        header = True :指定导出数据的新变量名,可直接提供 list
        index = True :是否导出索引
        mode = 'w' : Python 写模式,读写方式:r,r+ ,w , w+ , a , a+     
        encoding = 'utf-8' :默认导出的文件编码格式
        )
    df2.to_csv('temp.csv')
    df.to_excel(
         filepath_or_buffer :要读入的文件路径
         sheet_name = 1 Sheetl1 :要保存的表单名称
    )
    df2.to_excel('temp.xlsx', index = False,sheet_name = data)
    

    了解数据

    head()与 tail()

    当数据表中包含了数据行数过多时,而我们又想看一下每一列数据都是什么样的数据时,就可以把数据表中前几行或后几行数据显示出来进行查看head()方法返回前 n 行(观察索引值),显示元素的数量默认是 5,但可以传递自定义数值tail()方法返回后 n 行观察索引值),显示元素的数量默认是 5,但可以传递自定义数值

    #浏览前几条记录
    df.head()
    df.head(10)
    #浏览最后几条记录
    df.tail()
    

    info()

    熟悉数据的第一点就是看下数据的类型,不同的数据类型的分析思路是不一样的,比如说数值类型的数据就可以求均值,但是字符类型的数据就没法求均值了。
    info()方法查看数据表中的数据类型,而且不需要一列一列的查看,info()可以输出整个表 中所有列的数据类型。

    df.info()
    

    shape

    熟悉数据的第二点就是看下数据表的大小,即数据表有多少行,多少列 。
    shape()方法会以元组的形式返回行、列数。注意 shape 方法获取行数和列数时不会把索引和列索引计算在内。

    df.shape
    

    describe()

    熟悉数据的第三点就是掌握数值的分布情况,即均值是多少,最值是多少,方差及分位数分别是多少 。
    describe()方法就是可以获取所有数值类型字段的分布值。

    df.describe()
    

    列操作

    修改变量列

    columns

    df.columns =新的名称 list
    df.columns
    

    rename()

    df.rename(
    columns =新旧名称字典:{旧名称,:新名称,}
    inplace = False :是否直接替换原数据框)
    
    df.rename(columns ={'newname':'name','newname2':'name2'},inplace = True)
    

    筛选变量列

    通过 df.var 或 df[var] 可以选择单列

  • 注意:但只适用于已存在的列,只能筛选单列,结果为 Series
  • df.var 单列的筛选结果为 Series
    

    通过 df[[var]] 可以选择多列

    df[[var]] 单列的筛选结果为 DataFream
    df[['var1', 'var2']] 多列时,列名需要用列表形式提
    供(因此可使用列表中的切片操作) 多列的筛选结果为 DF
    

    删除变量列

    df.drop(
    index / columns =准备删除的行/列标签,多个时用列表
    形式提供
    inplace = False :是否直接更改原数据框)
    df.drop(columns =['col1','col2'])
    del df['column-name'] 直接删除原数据框相应的一列,建议尽量少用
    del df.column_name #不允许
    

    添加变量列

    根据新数据添加

    df[cloumn] = pd.Series([val,val2,val3],index=[c1,c2,c3])
    

    根据原数据添加

    df[cloumn] = df[c2]+df[c3]
    

    作者:张小生180

    物联沃分享整理
    物联沃-IOTWORD物联网 » Pandas入门指南(Python数据分析第一课)

    发表回复