Pandas常用方法及实例

2 篇文章 0 订阅

最近不管是在学习可视化还是NLP的时候,对于一些csv文件的处理显得很生疏。于是根据课上学到的内容,以及查询了一些博客文章,整理出了以下一些Pandas中十分常用的方法。

一、数据导入

Pandas可以导入以下数据类型,本篇博客此处就Excel和csv文件详细解读

pd.read_csv(filename)从CSV文件导入数据
pd.read_table(filename)从限定分隔符的文本文件导入数据
pd.read_excel(filename)从Excel文件导入数据
pd.read_sql(query, connection_object)从SQL表/库导入数据
pd.read_json(json_string)从JSON格式的字符串导入数据
pd.read_html(url)解析URL、字符串或者HTML文件
pd.read_clipboard()从粘贴板获取内容
pd.DataFrame(dict)从字典对象导入数据

读取Excel文件

read_excel(io, sheet_name=0, header=0, names=None, index_col=None,
           usecols=None, squeeze=False, dtype=None, engine=None,
           converters=None, true_values=None, false_values=None, skiprows=None,
           nrows=None, na_values=None, parse_dates=False, date_parser=None, thousands=None,
           comment=None, skipfooter=0, convert_float=True, **kwds)

乍一看参数是非常多的,但是主要的参数如下:

  • io
    输入的Excel文件。可以是字符串、文件对象、ExcelFile对象,可以是本地文件,也可以是URL。

  • sheet_name:
    是Excel文件工作表名,可以是字符串、整数(基于0的工作表位置索引)、列表(选择多个列表)

  • header:
    用作DataFrame对象列标签的行号,默认是0(第一行);如果设置为None,则没有指定列标签

  • index_col:
    用作DataFrame对象的行标签的列号,默认为None

  • skiprows:
    忽略文件头部行数,默认是None

  • skipfooter:
    忽略文件尾部行数,默认为0


读取csv文件

read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer', 
         names=None, index_col=None, usecols=None,
         squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, 
         engine=None, converters=None,true_values=None, false_values=None,
         skipinitialspace=False, skiprows=None, nrows=None, na_values=None,
         keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, 
         parse_dates=False,infer_datetime_format=False, keep_date_col=False,
         date_parser=None, dayfirst=False, iterator=False,chunksize=None,
         compression='infer', thousands=None, decimal=b'.', lineterminator=None,
         quotechar='"',quoting=0, escapechar=None, comment=None, encoding=None,
         dialect=None, tupleize_cols=None, error_bad_lines=True,warn_bad_lines=True,
         skipfooter=0, doublequote=True, delim_whitespace=False, low_memory=True,
         memory_map=False,float_precision=None)
  • filepath_or_buffer : str,pathlib。str, pathlib.Path, py._path.local.LocalPath or any object with a read() method (such as a file handle or StringIO)
    可以是URL,可用URL类型包括:http, ftp, s3和文件

  • sep : str, default ‘,’
    指定分隔符。如果不指定参数,则会尝试使用逗号分隔。分隔符长于一个字符并且不是‘\s+’,将使用python的语法分析器。并且忽略数据中的逗号。正则表达式例子:’\r\t’

  • delimiter : str, default None
    定界符,备选分隔符(如果指定该参数,则sep参数失效)

  • delim_whitespace : boolean, default False.
    指定空格(例如’ ‘或者’ ‘)是否作为分隔符使用,等效于设定sep=’\s+’。如果这个参数设定为Ture那么delimiter 参数失效。

  • header : int or list of ints, default ‘infer’
    指定行数用来作为列名,数据开始行数。如果文件中没有列名,则默认为0,否则设置为None。如果明确设定header=0 就会替换掉原来存在列名。header参数可以是一个list例如:[0,1,3],这个list表示将文件中的这些行作为列标题(意味着每一列有多个标题),介于中间的行将被忽略掉(例如本例中的2;本例中的数据1,2,4行将被作为多级标题出现,第3行数据将被丢弃,dataframe的数据从第5行开始。)。
    注意:如果skip_blank_lines=True 那么header参数忽略注释行和空行,所以header=0表示第一行数据而不是文件的第一行。

  • names : array-like, default None
    用于结果的列名列表,如果数据文件中没有列标题行,就需要执行header=None。默认列表中不能出现重复,除非设定参数mangle_dupe_cols=True。

  • index_col : int or sequence or False, default None
    用作行索引的列编号或者列名,如果给定一个序列则有多个行索引。
    如果文件不规则,行尾有分隔符,则可以设定index_col=False 保证pandas用第一列作为行索引。

  • usecols : array-like, default None
    返回一个数据子集,该列表中的值必须可以对应到文件中的位置(数字可以对应到指定的列)或者是字符传为文件中的列名。例如:usecols有效参数可能是 [0,1,2]或者是 [‘foo’, ‘bar’, ‘baz’]。使用这个参数可以加快加载速度并降低内存消耗。

  • as_recarray : boolean, default False
    不赞成使用:该参数会在未来版本移除。请使用pd.read_csv(…).to_records()替代。
    返回一个Numpy的recarray来替代DataFrame。如果该参数设定为True。将会优先squeeze参数使用。并且行索引将不再可用,索引列也将被忽略。

  • squeeze : boolean, default False
    如果文件值包含一列,则返回一个Series

  • prefix : str, default None
    在没有列标题时,给列添加前缀。例如:添加‘X’ 成为 X0, X1, …

  • mangle_dupe_cols : boolean, default True
    重复的列,将‘X’…’X’表示为‘X.0’…’X.N’。如果设定为false则会将所有重名列覆盖。

  • dtype : Type name or dict of column -> type, default None
    每列数据的数据类型。例如 {‘a’: np.float64, ‘b’: np.int32}

  • engine : {‘c’, ‘python’}, optional
    Parser engine to use. The C engine is faster while the python engine is currently more feature-complete.
    使用的分析引擎。可以选择C或者是python。C引擎快但是Python引擎功能更加完备。

  • converters : dict, default None
    列转换函数的字典。key可以是列名或者列的序号。

  • true_values : list, default None
    Values to consider as True

  • false_values : list, default None
    Values to consider as False

  • skipinitialspace : boolean, default False
    忽略分隔符后的空白(默认为False,即不忽略).

  • skiprows : list-like or integer, default None
    需要忽略的行数(从文件开始处算起),或需要跳过的行号列表(从0开始)。

  • skipfooter : int, default 0
    从文件尾部开始忽略。 (c引擎不支持)

  • skip_footer : int, default 0
    不推荐使用:建议使用skipfooter ,功能一样。

  • nrows : int, default None
    需要读取的行数(从文件头开始算起)。

  • na_values : scalar, str, list-like, or dict, default None
    一组用于替换NA/NaN的值。如果传参,需要制定特定列的空值。默认为‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘nan’`.

  • keep_default_na : bool, default True
    如果指定na_values参数,并且keep_default_na=False,那么默认的NaN将被覆盖,否则添加。

  • na_filter : boolean, default True
    是否检查丢失值(空字符串或者是空值)。对于大文件来说数据集中没有空值,设定na_filter=False可以提升读取速度。

  • verbose : boolean, default False
    是否打印各种解析器的输出信息,例如:“非数值列中缺失值的数量”等。

  • skip_blank_lines : boolean, default True
    如果为True,则跳过空行;否则记为NaN。

  • infer_datetime_format : boolean, default False
    如果设定为True并且parse_dates 可用,那么pandas将尝试转换为日期类型,如果可以转换,转换方法并解析。在某些情况下会快5~10倍。

  • keep_date_col : boolean, default False
    如果连接多列解析日期,则保持参与连接的列。默认为False。

  • date_parser : function, default None
    用于解析日期的函数,默认使用dateutil.parser.parser来做转换。Pandas尝试使用三种不同的方式解析,如果遇到问题则使用下一种方式。
    1.使用一个或者多个arrays(由parse_dates指定)作为参数;
    2.连接指定多列字符串作为一个列作为参数;
    3.每行调用一次date_parser函数来解析一个或者多个字符串(由parse_dates指定)作为参数。

  • dayfirst : boolean, default False
    DD/MM格式的日期类型

  • iterator : boolean, default False
    返回一个TextFileReader 对象,以便逐块处理文件。

  • chunksize : int, default None
    文件块的大小, See IO Tools docs for more informationon iterator and chunksize.

  • compression : {‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’, None}, default ‘infer’
    直接使用磁盘上的压缩文件。如果使用infer参数,则使用 gzip, bz2, zip或者解压文件名中以‘.gz’, ‘.bz2’, ‘.zip’, or ‘xz’这些为后缀的文件,否则不解压。如果使用zip,那么ZIP包中国必须只包含一个文件。设置为None则不解压。

  • thousands : str, default None
    千分位分割符,如或者.

  • decimal : str, default ‘.’
    字符中的小数点

  • float_precision : string, default None
    指定C引擎应用于浮点值的转换器。普通转换器没有选项,高精度转换器有选项,往返转换器有选项。

  • lineterminator : str (length 1), default None
    行分割符,只在C解析器下使用。

  • quotechar : str (length 1), optional
    引号,用作标识开始和解释的字符,引号内的分割符将被忽略。

  • quoting : int or csv.QUOTE_* instance, default 0
    控制csv中的引号常量。可选 QUOTE_MINIMAL (0), QUOTE_ALL (1), QUOTE_NONNUMERIC (2) or QUOTE_NONE (3)

  • doublequote : boolean, default True
    双引号,当单引号已经被定义,并且quoting 参数不是QUOTE_NONE的时候,使用双引号表示引号内的元素作为一个元素使用。

  • escapechar : str (length 1), default None
    当quoting 为QUOTE_NONE时,指定一个字符使的不受分隔符限值。

  • comment : str, default None
    标识着多余的行不被解析。如果该字符出现在行首,这一行将被全部忽略。

  • encoding : str, default None
    指定字符集类型,通常指定为’utf-8’. List of Python standard encodings

  • dialect : str or csv.Dialect instance, default None
    如果没有指定特定的语言,如果sep大于一个字符则忽略。具体查看csv.Dialect 文档

  • tupleize_cols : boolean, default False
    保留列上元组的列表不变(默认值是转换为列上的多索引)

  • error_bad_lines : boolean, default True
    如果一行包含太多的列,那么默认不会返回DataFrame ,如果设置成false,那么会将改行剔除(只能在C解析器下使用)。

  • warn_bad_lines : boolean, default True
    如果error_bad_lines =False,并且warn_bad_lines =True 那么所有的“bad lines”将会被输出(只能在C解析器下使用)。

  • low_memory : boolean, default True
    分块加载到内存,再低内存消耗中解析。但是可能出现类型混淆。确保类型不被混淆需要设置为False。或者使用dtype 参数指定类型。注意使用chunksize 或者iterator 参数分块读入会将整个文件读入到一个Dataframe,而忽略类型(只能在C解析器中有效)


二、数据信息查看

本篇博客导入的是titanic数据集

titanic = pd.read_csv('titanic.csv')

df.head(n)

查看DataFrame对象的前n行,默认n为5

titanic.head()

在这里插入图片描述


df.tail(n)

查看DataFrame对象的最后n行,默认n为5

titanic.tail()

在这里插入图片描述


df.shape

查看行数和列数,注意此处没有()

titanic.shape

在这里插入图片描述


df.info()

查看索引、数据类型和内存信息

titanic.info()

在这里插入图片描述
可以通过这个方法查看数据集的一些基本信息。综合titanic.shape的输出结果(总共891条)可以看到,在age、embarked、deck、embark_town这四个维度上是有缺失值的


df.describe()

查看数值型列的汇总统计

titanic.describe()

在这里插入图片描述
可以看出,df.describe()从均值、标准差、上四分位数、中位数等方面进行了汇总统计


s.value_counts()

查看Series对象的唯一值和计数

titanic['class'].value_counts()

在这里插入图片描述
由于是Series对象,所以要先索引某一列。

还可以通过dict()或list()转换成需要的格式

dict(titanic['class'].value_counts())

在这里插入图片描述

list(titanic['class'].value_counts())

在这里插入图片描述


df.values

以array的形式返回数据表的值

titanic.values

在这里插入图片描述


df.values.tolist()

分别将每条数据以列表的形式返回

titanic.values.tolist()

在这里插入图片描述


df.columns.values.tolist()

以列表的形式返回列名
(同样,df.columns.values是以array的形式返回列名,在此不再列举)

titanic.columns.values.tolist()

在这里插入图片描述


df.dtypes

查看所有列的数据类型

titanic.dtypes

在这里插入图片描述


s.dtype

查看某一列的数据类型

titanic['age'].dtype

在这里插入图片描述


三、数据清洗

df.isnull()

检查DataFrame对象中的控制,并返回一个boolean数组

titanic.isnull()

在这里插入图片描述


df.isnull().any()

列级别的判断,只要某一列有空值或NaN,就为True,否则为False

titanic.isnull().any()

在这里插入图片描述


df[df.isnull().values==True]

只显示存在缺失值的行列,可以更清楚的确定缺失值的位置

titanic[titanic.isnull().values==True]

在这里插入图片描述


df.notnull()

检查DataFrame对象中的非空值,并返回一个Boolean数组

titanic.notnull()

在这里插入图片描述


df.dropna()

删除所有包含空值的行

titanic_dna = titanic.dropna()
titanic_dna.head()

在这里插入图片描述


df.fillna(x)

用x替换DataFrame对象中所有的空值

titanic_fna = titanic.fillna(5)
titanic_fna.head()

在这里插入图片描述


s.astype()

更改某一列的数据格式

titanic_dna['age'].astype(int)

在这里插入图片描述


s.drop_duplicates()

删除后出现的重复值

可以通过加入参数keep='last'使其删除先出现的重复值


s.replace(a,b)

用b替换所有等于a的值

titanic['pclass'].replace(1,'One').replace(2,'Two').replace(3,'Three')

在这里插入图片描述


四、数据预处理

df.set_index()

设置索引列

titanic.set_index('age')

在这里插入图片描述


df_inner.sort_values(by=[’’])

按照特定列的值排序

titanic.sort_values(by=['age'])

在这里插入图片描述
可以添加参数ascending=False使其倒序排序

还可以指定多行排序

titanic.sort_values(by=['age','fare'],ascending = [False,True]) 

在这里插入图片描述
先按age倒序排序,当age值相同时,根据fare的值顺序排序


df_inner.sort_index()

按照索引列排序.
axis=0按照行名排序;axis=1按照列名排序。默认axis=0

titanic.sort_index(axis=1)

在这里插入图片描述
同样也可以通过指定ascending=False来倒序排序


np.where()

这个不好表示,就直接上例子吧

import numpy as np
titanic['survived'] = np.where(titanic['age'] < 10,'high_prob','low_prob')
titanic

在这里插入图片描述
具体来说,就是按照age的大小,如果age小于10,那么survived的值为high_prob,否则为low_prob。由于此处NaN没有处理,因此age为NaN的行survived的值均为low_prob


df[df[col]>n]

选择col列的值大于n的行

titanic[titanic['age']>70]

在这里插入图片描述


df.groupby(col)

返回一个按col进行分组的Groupby对象

titanic.groupby('sex')

在这里插入图片描述
若想看分组后的内容,还需要加个groups

titanic.groupby('sex').groups

在这里插入图片描述


五、数据统计

s.std()

计算某一列的标准差

titanic['fare'].std()

在这里插入图片描述


s1.cov(s2)

计算两个字段间的协方差

titanic['survived'].cov(titanic['age'])titanic['survived'].cov(titanic['age'])

在这里插入图片描述


df.cov()

计算所有字段间的协方差

titanic.cov()

在这里插入图片描述


s1.corr(s2)

两个字段的相关性分析,计算出来的是pearson系数

titanic['survived'].corr(titanic['age'])

在这里插入图片描述


df.corr()

整个数据表的相关性分析

titanic.corr()

在这里插入图片描述

先处理掉缺失值后,再进行corr()可能结果会更有说服力

df.count()

返回每一列中的非空值的个数

titanic.count()

在这里插入图片描述


df.sample()

对数据进行采样

可以添加参数n=N取出N个样本

titanic.sample(4)

在这里插入图片描述

还可以添加weights手动设置采样权重

weights = np.random.random(891)
titanic.sample(n=4, weights=weights) 

此处需要注意weights的值的个数和titanic的要是一样的,否则会报错

通过修改replace的参数确定是否放回。replace=True代表采样后放回,replace=False代表采样后不放回

titanic.sample(n=4,replace=True)

在这里插入图片描述


六、数据汇总

数据汇总,是基于groupby()和count()的

df.groupby(‘col1’).count()

按照col1列对整个数据表汇总

titanic.groupby('sex').count()

在这里插入图片描述

还可以指定两个列进行汇总

titanic.groupby(['sex','pclass']).count()

在这里插入图片描述


df.groupby(‘col1’)[‘col2’].count()

按照col1列对整个数据表汇总后,单独取出col2列的汇总结果

titanic.groupby('sex')['age'].count()

在这里插入图片描述


df.groupby(‘col1’)[‘col2’].agg()

对分类汇总后的结果进行处理,如:

titanic.groupby('sex')['fare'].agg([len,np.sum,np.mean])

在这里插入图片描述
计算了按sex分组后,fare的总和以及均值


七、数据导出

df.to_csv(filename)导出数据到CSV文件
df.to_excel(filename)导出数据到Excel文件
df.to_sql(table_name, connection_object)导出数据到SQL表
df.to_json(filename)以Json格式导出数据到文本文件

参考

[1] https://blog.csdn.net/liufang0001/article/details/77856255/

[2] https://blog.csdn.net/shanzhonglujie/article/details/81354653

[3] https://blog.csdn.net/LHISLH/article/details/48436327

[4] https://blog.csdn.net/u010801439/article/details/80033341

[5] https://blog.csdn.net/xiaoxiaosuwy/article/details/81187694

[6] https://www.jianshu.com/p/f0ed06cd5003

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值