Pandas基础

2024-05-12

1. Pandas基础

  Pandas 是 Python 语言的一个扩展程序库,用于数据分析。    Pandas 是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具。   Pandas 名字衍生自术语 "panel data"(面板数据)和 "Python data analysis"(Python 数据分析)。   Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)。   Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据。   Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征。   Pandas 广泛应用在学术、金融、统计学等各个数据分析领域。

Pandas基础

2. Pandas入门教程

 大家好,我是皮皮。其实这个pandas教程,卷的很严重了,才哥,小P等人写了很多的文章,这篇文章是粉丝【古月星辰】投稿,自己学习过程中整理的一些基础资料,整理成文,这里发出来给大家一起学习。
                                           本文主要详细介绍了pandas的各种基础操作,源文件为zlJob.csv,可以私我进行获取,下图是原始数据部分一览。
                                           pandas官网:
   一般情况下我们得到的数据类型大多数csv或者excel文件,这里仅给出csv,
   pandas可以创建两种数据类型,series和DataFrame;
                                                                                                                                                                   结果:
                                           axis表示轴向,axis=1,表示纵向(删除一列)
   iloc是基于位置的索引,利用元素在各个轴上的索引序号进行选择,序号超出范围会产生IndexError,切片时允许序号超过范围,用法包括:
   1. 使用整数
                                           2. 使用列表或数组
                                           3. 切片对象
                                           常见的方法就如上所示。
                                                                                   层次化索引应用于当目标数据的特征值很多时,我们需要对多个特征进行分析。
   首先创建一个简单的表格:
   结果如下:
                                            判断缺失值 
   结果如下:
                                            填充缺失值 
                                            删除缺失值 
   结果如下:
                                           当然还有其他情况:
   这里就不做一一展示(原理都是一样的)
    groupby 
   根据职位名称进行分组:
   得到一个对象,我们可以去进行平均值,总和计算;
   当然了可以根据多个特征进行分组,也是没有问题的;
    concat(): 
   官网参数解释如下:
   测试:
   结果如下:
                                            merge() 
   这里给出常用参数解释:
   测试:
   结果如下:
                                           相同的字段是'key',所以指定on='key',进行合并。
   输出结果:
   5.2 时间序列在pandas中的应用
   输出结果:
                                           本文基于源文件zlJob.csv,进行了部分pandas操作,演示了pandas库常见的数据处理操作,由于pandas功能复杂,具体详细讲解请参见官网

3. Pandas基础教程

 DataFrameGroupBy对象常用的函数:
                                           数据缺失通常有两种情况:
   一种就是空,None等,在pandas是NaN(和np.nan一样)。
   另一种是我们让其为0,蓝色框中。
    在pandas中数据缺失处理方法 :
   判断数据是否为NaN:pd.isnull(df),pd.notnull(df)
   处理方式1:删除NaN所在的行列dropna (axis=0, how='any', inplace=False)
   处理方式2:填充数据,t.fillna(t.mean()),t.fiallna(t.median()),t.fillna(0)
   处理为0的数据:t[t==0]=np.nan
    注意 :当然并不是每次为0的数据都需要处理;计算平均值等情况,nan是不参与计算的,但是0会。
     
   ​         r取值范围[‐1,1]
   ​         0.8‐1.0 极强相关;0.6‐0.8 强相关; 0.4‐0.6 中等程度相关; 0.2‐0.4 弱相关; 0.0‐0.2 极弱相关或无相关。
   ​          相关分析函数 适用于Series和DataFrame类型
   参考资料:
   网址:
    https://blog.csdn.net/qq_35318838/article/details/80564938 
   书籍:
   《python数据科学手册》
   《利用python进行数据分析》
   《python科学计算》
   视频:
   《黑马程序员之数据分析》
   《python数据分析与展示》

Pandas基础教程

4. Pandas 入门

  pd.Series  主要设置两个参数,data 和 index,如果不设置 index,则 index 从 0 开始递增。除此之外,还可以设置 dtype。
   除了直接设置各个字段,还可以将字典作为参数传入,series 会自动将 key 作为 index,将 value 作为 data。
   为了保证数据存取的效率,series 的 index 必须是可哈希的。
   series 和字典一样,索引和修改的时间复杂度为   。它有两种索引方式,第一种索引方式与字典相同,但强烈不推荐,会导致各种副作用:
   在某些情况下,它会产生歧义:
   第二种索引方式是采用  .loc  方法,这种写法是推荐的:
   注意一个细节:利用 index 做切片时,和 list 或者 array 利用下标切片,不包括末尾元素不同,index 切片是包括 end 元素的。   除了利用 index 切片,Series 也可以用下标切片,此时不包括终点下标对应的元素,表现和 python 惯例一致:
   不像字典的 key 是唯一的,Series 支持 index 包含重复元素。但对 Series 做切片时,如果重复的 index 不是相邻的,则会报错:"Cannot get left\right slice bound for non-unique label: 'xxx' "。
   因此强烈建议先对 index 排序,这样可以保证切片能够一直能正确运行,并且还能提高索引的效率。
   和 numpy 一样,Series 也支持高级索引:
   两个 Series 可以相加,只有相同 label 的数据会相加,只存在于其中一个 Series 的数据相加后为 NaN,但也可以指定一方缺失的 label 对应的默认值:
   需要注意的是,在操作过程中, series value 的数据类型可能会隐式地被改变,如果不注意,很有可能影响增删的效率,甚至产生错误的结果。
   影响效率的例子:
   产生错误结果的例子:
   DataFrame 还支持广播功能:
   可以将 DataFrame 保存为 csv 文件或 json 文件
   包括一系列函数:
    p.describe()  默认只显示数字列,但也可以设置参数  include='all'  现实所有列。    p.loc['sonia']  展示 sonia  行    p.loc['sonia', 'age']  只显示 sonia 的年龄
   筛选出女性条目:
   增加年龄筛选条件:
    DataFrame.mean()  可以按列计算平均值
   几种不建议的写法:
    p.drop(columns=['mean', ], inplace=True)  用于删除一列或多列, inplace  作用是,设置是否修改原来的 p,如果True,返回 None,原 p 被修改,如果 False,返回被修改后的 DataFrame,同时原 p 保留。
   DataFrame 支持所有 numpy 的函数,numpy 函数可以直接施加在 DataFrame 上,例如:
   但是,如果需要用到 DataFrame 的 label 对齐特性,例如两个 index 顺序并不相同的 DataFrame 相加,那么 numpy 的函数将直接计算中间的 values,而不会考虑它们 label 对齐的问题。(该问题已经在 pandas 0.2.5 中被修正)
   运算中设置  fill_value  可以让表中缺失的数据被 fill_value 代替。
   当一个 Series 和一个 DataFrame 相加时,pandas 会默认 Series 是一行,并把它广播到其它行。Series 的 index 会被对应到 DataFrame 的列上,并对齐。如果 Series 的 index 与 DataFrame 的列没关系,那么会扩增 DataFrame,扩增区域对应的数据为 NaN。如果想让 Series 的 index 和 DataFrame 的index 对应,则需要指定 axis=0:
   在构建 pandas Series 或者 DataFrame 时,有两种方式可以表示 NaN,一种是  np.NaN ,另一种是python 的  None  对象。 np.NaN  的数据类型是  float ,因此,在 pandas 中,存在 NaN 的对象要么是  float64  的,要么是  object  类型。
   pandas 利用如下方法处理缺失数据:
    MultiIndex  适用于数组大于二维的情况。所有可以用  Index  的地方,都可以用  MultiIndex 。    MultiIndex Series 
    MultiIndex DataFrame  利用  from_product  可以方便地创建 MultiIndex。
    MultiIndex DataFrame 的索引十分方便 
   元组配合  slice ,为 MultiIndex DataFrame 做切片:
    concat  用于将两个表拼接起来,它适用于两个表有相同的 index 或者有相同的 columns。
    concat  也适用于拼接 Series,但是不论是 DataFrame 还是 Series,它不会检查各行的 index 是否重复。
   一个解决方案是设置  verify_integrity  参数,它会在遇到两个相同 index 的时候报错。但是这无疑会导致额外的计算,因此除非确实必要,一般不设置它。
   设置拼接参数
    merge  适用于两个表某 列 相同,然后所有的融合都基于该列:
    merge  默认采取  inner join  的策略,如果以某列为基准,那么最终结果中,只有同时出现在这两列中的数据被保留。   总共有三种merge 的方式:
    merge  可以设置  on=  或者  left_on= 、 right_on=  显式指定基准列
   当两表中的基准列元素不完全一致时,通过设置  how  有四种 merge 策略:
    groupby  按照某个指标聚类,分别计算各类数据
    groupby  返回值的属性:
    groupby  方法分发。 groupby  返回的对象如果没有实现某个 DataFrame的方法,该对象仍然可以调用,只不过是遍历每个类别,分别调用。
    groupby().agg  方法:agg 中以 list/dict 形式传入函数名(或名字的字符串),计算每个组的统计量。
    groupby().filter()  filter 内传入筛选条件,可以是 lambda 表达式
    groupby().transform()  transform 内传入变换函数,如 lambda 表达式,变换函数将施加在每个子 group 上,一个经典用例是用它来对每个 group 内部中心化,或者用group 均值代替其中的 NaN。
   以 titanic 的例子,我们希望得到这样的表格:有三行,每行代表一个舱位级别;有两列,每列代表一个性别。此时需要用到  pivot_table 。 pivot_table  相当于把  groupby  的结果表示为二维表格。
   numpy 和 pandas 可以很好地处理各种格式的时间字符串,将其转化为标准格式。同时提供了一系列方法,对时间序列求区间、采样等等。

5. Pandas介绍

 首先,需要先安装numpy和pandas环境,参考: https://pandas.pydata.org/    。以下语句检查并确认安装成功。
   Pandas 有三种基本数据结构:Series、DataFrame 和 Index。
   Pandas 的 Series 对象是一个带索引数据构成的一维数组。Series 对象将一组数据和一组索引绑定在一起,我们可以通过 values 属性和 index 属性获取数据。values 属性返回的结果与 NumPy 数组类似;index 属性返回的结果是一个类型为  pd.Index  的类数组对象。   可以像访问Numpy那样来访问Series(序号也是从0开始计数的)。
   Pandas 的 Series 对象比Numpy更加灵活、通用。   两者的主要区别是:NumPy 数组通过 隐式定义 的整数索引获取数值,而 Pandas 的 Series 对象用一种 显式定义 的索引与数值关联。也就是说,Numpy的索引是系统自分配的无法更改,但是Series对象是可以手工指定的。
   Series是 特殊的字典 ,Series 对象其实是一种将类型键映射到一组类型值的数据结构,Pandas Series 的类型信息使得它在某些操作上比 Python 的字典更高效。用字典创建 Series 对象时,其索引默认 按照顺序排列 。
   DataFrame类似于RDBMS中的Table。DataFrame就可以看作是一种既有灵活的行索引,又有灵活列名的二维数组。   DataFrame有2个常用属性,分别是 index 属性 和 columns 属性 。前者可以获取索引标签(行标签);后者是是存放列标签的Index 对象。DataFrame 是特殊的字典,一列映射一个Series 的数据。   DataFrame可以通过以下几种方式来创建:(1)通过单个 Series 对象创建。(2)通过字典列表创建。(3)通过 Series 对象字典创建。(4)通过NumPy 二维数组创建。(5)通过 NumPy 结构化数组创建。
   可以将Index视为一个不可变数组或有序集合。当作为不可变数组时,一般数组的访问方式(例如切片等)对Index适用,与数组的最大区别是 Index对象不可更改 。当作为集合时,Index也可以做交集、并集等常规操作。
   Series的访问既可以作为字典,也可以作为一维数组。数据访问的方法,可以参考Numpy的访问方式,这里不赘述。
   如果Series的显式索引是整数,那么在访问时,很容易混淆。例如下边的例子:
   从上边的例子总结得出,python的默认规则是:在单个访问时,使用的显式索引,而在切片时,使用的是隐式索引,很容易混淆!python提供了loc、iloc和ix三种索引器。   loc表示:表示取值和切片都是显式的。iloc 属性,表示取值和切片都是隐式索引。ix是loc和iloc的混合形式,应用于dataFrame(使用例子在3.3节)。
   dataframe可以通过对列名进行字典形式(dictionary-style)的取值获取数据。可以把 DataFrame 看成是一个增强版的二维数组,用 values 属性按行查看数组数据。ix 索引器对于整数索引的处理和之前在 Series 对象中介绍的一样,都容易让人混淆。
   对于一元运算(像函数与三角函数),这些通用函数将在输出结果中保留索引和列标签(很简单,所有元素做相应运算并返回);而对于二元运算(如加法和乘法),Pandas 在传递通用函数时会自动 对齐索引 进行计算。   当在两个 Series 或 DataFrame 对象上进行二元计算时,Pandas 会在计算过程中对齐两个对象的索引。如果想给缺失数值指定一个默认值,需要使用add来替代+,并指定fill_value:
   两个对象的行列索引可以是不同顺序的,结果的索引会自动按顺序排列。
   DataFrame 和 Series 的运算规则,与NumPy 中二维数组与一维数组的运算规则是一样的。需要使用广播原则,那么默认地,会按行计算。如果想要按列运算,需要使用参数axis = 0 。
   注意:DataFrame访问行可以使用loc,但是访问列,只能是df['col']这种形式了。
   缺失值有三种形式:null、NaN 或 NA。   处理缺失值,一般有两种方法:一种方法是通过一个覆盖全局的掩码表示缺失值,另一种方法是用一个标签值(sentinel value)表示缺失值。   掩码是利用一个跟原来一样大小的矩阵,用0或者1表示某个元素缺失。标签值是利用一个特殊字符例如NaN表示缺失。   Pandas 选择用标签方法表示缺失值,包括两种 Python 原有的缺失值: 浮点数据类型(包括整型) 的 NaN 值,以及 Python的 None 对象 。
   使用None时,表示一个空的python对象,所以numpy的dtype=object,因为是对象所以在进行大批量计算时,效率会比标量低。使用np.nan时表示标量,效率会高很多。
   对于缺失值,pandas提供了几个有用的API方法,分别是:isnull(),notnull(),dropna(),fillna()。其中,对于dataframe,dropna()方法默认会将包含NaN的整行都drop掉,如果想按照整列drop,增加axis=1参数。
   pandas的MultiIndex提供了多级索引的功能,用元组表示是多级索引的基础。
   下面例子,使用元组索引生成Series。筛选2019的索引,非常繁琐。
   Pandas 的 MultiIndex 类型提供多种实现方法,下边例子使用元组表示实现。   unstack() 方法可以快速将一个多级索引的 Series 转化为普通索引的DataFrame。stack() 方法实现相反的效果。
   总结一下,创建多级索引的方法包括:   (1)通过一个有不同等级的若干简单数组组成的列表来构建 MultiIndex:pd.MultiIndex.from_arrays。   (2) 多个索引值的元组构成的列表创建 MultiIndex:pd.MultiIndex.from_tuples。   (3)用两个索引的笛卡尔积创建MultiIndex:pd.MultiIndex.from_product。   (4)直接提供 levels和labels创建 MultiIndex(lablels是指每个级别的整数指定每个位置):
   上边的例子中,不管是Series还是DataFrame都是按照行来进行多级索引,其实,也可以按列索引,而且非常简单,下边是一个例子(几个学生在2018和2019两次考试的不同科目成绩):
   需要对多级索引做显示切片操作时,可以使用pd.IndexSlice对象来切,不同级别的维度,拿逗号分割,例如下边例子中的df_sd_003.loc[idx_sd[2018,:],idx_sd['Alice',:]]。其他切片和取值操作与Numpy很类似。
   如果 MultiIndex 不是有序的索引,那么大多数切片操作都会失败。   如果Series或者DataFrame的索引是未排序的,可以简单地通过sort_index方法来快速排序。   层级数据维度转换的另一种方法是行列标签转换,可以通过reset_index 方法实现
   通过pd.concat()实现pandas对象合并,pd.cancat的所有参数(下面列举的是这些参数的默认值):
   pd.concat() 可以简单地合并一维的 Series 或 DataFrame 对象,与   np.concatenate() 合并数组一样。   DataFrame 的合并默认都是逐行进行的(axis=0);pd.concat在合并时会保留索引,即使索引是重复的!如果设置 verify_integrity=True,那么生成重复索引时,会触发异常!有时索引无关紧要,那么合并时就可以忽略它们,可以通过设置 ignore_index 参数来实现。默认的合并方式是对所有输入列进行并集合并(join='outer'),当然也可以用 join='inner' 实现对输入列的交集合并。下面是一个实现合并的例子:
   Pandas 的基本特性之一就是高性能的内存式数据连接(join)与合并(merge)操作。
   pd.merge() 实现的功能基于关系代数(relational algebra)的一部分。 pd.merge() 函数实现了三种数据连接的类型:一对一、多对一和多对多。pd.merge()会自动识别2个dataframe共有的列,并以这个列进行关联。
   上边的例子中,关联的两个dataframe具有相同名称的列,pandas会直接按同名列合并,由于两个输入要合并的列通常都不是同名的,因此 pd.merge() 提供了一些参数处理这个问题。   1.最简单的方法就是直接将参数 on 设置为一个列名字符串或者一个包含多列名称的列表,这个参数只能在两个 DataFrame 有共同列名的时候才可以使用。

Pandas介绍

6. Pandas - 绘图操作

 在  Jupyter Notebook  中执行  %matplotlib inline  魔法指令,可以方便地在  Jupyter Notebook  中绘制  matplot  图形。
   在  pandas  中绘图非常方便,只需要一个简单的  plot  方法,即可绘制出折线图。下面,我们首先构造一个  Series :
   构造出的  Series  内容如下:
   绘图:
   会指出来的图形就是 X**2 了:
                                           对于  DataFrame  也可以直接调用  .plot()  方法来绘制折线图。首先,构造一个  DataFrame :
                                           由于  DataFrame  中相当于包含了多个索引相同的  Series ,因此将会绘制出  x   x*2   x*3  3 条不同的折线:
                                           除了默认的折线图之外,我们可以指定  kind  属性,来绘制不同的统计图形,比如柱形图、散点图等。首先,构造一个  Series :
   下面,我们分别  kind='bar'   kind='barh'  来将上面的  Series  绘制成柱状图和条形图:
                                           对于  DataFrame  也可以绘制柱形图,首先构造一个  DataFrame :
                                           绘制柱形图:
                                           下面,再构造一个新的  DataFrame ,用于绘制散点图:
                                           散点图需要指定  x   y  变量, alpha  表示透明度,可以通过透明度看出落在某个坐标上的点的多少:
                                           上述所有绘图方式,可以不传入  kind  ,直接使用  df.plot.scatter  来绘制相应的图形:

7. Pandas数据类型操作

数据处理、分析等操作的首要操作是我们正确地设置了数据类型,笔者自己经常也会遇到数据类型不合理,而造成无法进行后续操作的困境。本文总结了Pandas中进行数据类型转换的三种基本方法,同时介绍了基于数据类型取数的方法:
                                          
 下表中展示的是Pandas、Python和Numpy中支持的数据类型,可以看到pandas中支持的类型是最丰富的的。
                                          
 下面是模拟的一份数据,包含多个字段名称
                                                                                  
 查看数据的字段类型:
                                          
 比如我们想在数据上进行一些操作,比如将"2019年"、和"2020年"的数据相加:很明显数据不是我们想要的结果。
  
 根本原因:这两个字段是字符类型,进行+操作,是直接将里面的内容拼接在一起,而不是里面数值的相加。
                                          
 正确的操作:
  
 1、先把这两个字段中的数字单独提取出来
                                          
 2、查看数据类型
  
 生成的两个新字段仍然是字符类型,不能直接相加
                                          
 3、将数字表现型的字符型数据转成数值型
  
 有两种方法实现这种需求:
                                          
 3、将两个新的字段相加
                                          
 求两个年份之间的差值:
                                          
 求出2020年的增长率:
                                          
 现在整个增长率是float的数值型,我们想把它转成%的形式,也就是字符类型的数据:
  
 在这里也是两种方法满足上面的需求:
                                          
 如果某个字段中大部分的数据都是数值型,但是存在少量的缺失值的情况,可以使用下面的方法进行转化:
                                                                                  
 如果在实际数据中,我们遇到类似年、月、日等时间的数据,可以进行转化:比如我们想根据数据中的年月日生成一个生日的字段
                                          
 1、上面的日、月、年现在是数值类型的数据,不能直接相加,先进行转化:
  
 2、转成字符型数据之后,再进行相加:
                                          
 3、通过pd.to_datetime转成pandas中的时间类型数据
                                          
 经过检验:如果字段是用英文表示的,下面的方法可以直接转成datetime64[ns]类型,使用中文汉字当做属性名的时候,该方法不适用。Pandas中的to_datetime()函数可以把单独的year、month、day三列合并成一个单独的时间戳:
                                                                                  
 比如在是否为大客户中,我们想将Y换成True,N换成False,可以通过np.where来是实现:
                                          
 在使用pandas读取文件的时候,我们可以直接改变数据类型,使用参数是converters:
                                          
 我们看看df数据中存在的数据类型:object、int64、float64、bool、datetime64[ns]
                                          
 也可以同时筛选包含多个数据类型:
                                                                                  
 同时排除多个字段数据类型:
                                          
 对数据进行操作的第一步就是保证我们设置了正确的数据类型,然后才能进行后续的数据处理、数据分析、可视化等一系列的操作。不用的数据类型可以用不同的处理方法。注意,一个列只能有一个总数据类型。本文中介绍了Pandas中常见的数据类型转化和基于数据类型取数的方法,希望对读者有所帮助。

Pandas数据类型操作

8. Pandas 必知必会的18个实用技巧,值得收藏!

干净整洁的数据是后续进行研究和分析的基础。数据科学家们会花费大量的时间来清理数据集,毫不夸张地说,数据清洗会占据他们80%的工作时间,而真正用来分析数据的时间只占到20%左右。
  
 所以,数据清洗到底是在清洗些什么?
   通常来说,你所获取到的原始数据不能直接用来分析,因为它们会有各种各样的问题,如包含无效信息,列名不规范、格式不一致,存在重复值,缺失值,异常值等.....
  
 本文会给大家介绍一些Python中自带的Pandas和NumPy库进行数据清洗的实用技巧。
  
 这是读取数据的入门级命令,在分析一个数据集的时候,很多信息其实是用不到的,因此,需要去除不必要的行或列。这里以csv文件为例,在导入的时候就可以通过设置pd.read_csv()里面的参数来实现这个目的。
                                          
 先来感受一下官方文档中给出的详细解释,里面的参数是相当的多,本文只介绍比较常用的几个,感兴趣的话,可以好好研究一下文档,这些参数还是非常好用的,能省去很多导入后整理的工作。
  
 当原始数据的列名不好理解,或者不够简洁时,可以用.rename()方法进行修改。这里我们把英文的列名改成中文,先创建一个字典,把要修改的列名定义好,然后调用rename()方法。
  
 数据默认的索引是从0开始的有序整数,但如果想把某一列设置为新的索引,除了可以用read_csv()里的参数index_col,还可以用.set_index()方法实现。
                                          
 另外补充,如果数据经过删除或结构调整后,我们可以重置索引,让索引从0开始,依次排序。
  
 字符串str操作是非常实用的,因为列中总是会包含不必要的字符,常用的方法如下:
  
 str.lower() 是把大写转换成小写,同理,str.upper()是把小写转换成大写,将示例中用大写字母表示的索引转换成小写。
  
 设置首字母大写
  
 str.replace("a", "") 替换特定字符。这里把列中的a去掉,替换成空字符。
  
 去除字符串中的头尾空格、以及\n \t。
  
 str.split('x') 使用字符串中的'x'字符作为分隔符,将字符串分隔成列表。这里将列中的值以'.'进行分割。
  
 str.get() 选取列表中某个位置的值。接着上面分割后的结果,我们用str.get(0)取出列表中前一个位置的数值,生成新的一列。
  
 str.contains() 判断是否存在某个字符,返回的是布尔值。
  
 str.find("-")检测字符串中是否包含"-",如果包含,则返回该子字符串开始位置的索引值;如果不包含,则返回-1。
  
 学完基本的字符串操作方法,我们来看一下如何结合NumPy来提高字符串操作的效率。
   我们可以将Pandas中的.str()方法与NumPy的np.where函数相结合,np.where函数是Excel的IF()宏的矢量化形式,它的语法如下:
  
 如果condition条件为真,则执行then,否则执行else。这里的condition条件可以是一个类数组的对象,也可以是一个布尔表达式,我们也可以利用np.where函数嵌套多个条件进行矢量化计算和判断。
  
 接下来就要对列中的字符串进行整理,除了利用循环和.str()方法相结合的方式进行操作,我们还可以选择用applymap()方法,它会将传入的函数作用于整个DataFrame所有行列中的每个元素。
                                          
 先定义函数get_citystate(item),功能是只提取元素中的有效信息。然后,我们将这个函数传入applymap(),并应用于df3,看起来是不是干净多了,结果如下:
                                          
 如果你没听说过它的话,我不得强调它的重要性。输入下面的命令:
  
 你会发现df1已经发生了改变。这是因为df2 = df1并不是生成一个df1的复制品并把它赋值给df2,而是设定一个指向df1的指针。所以只要是针对df2的改变,也会相应地作用在df1上。为了解决这个问题,你既可以这样做:
  
 也可以这样做:
  
 这个命令用于检查值的分布。你想要检查下“c”列中出现的值以及每个值所出现的频率,可以使用:
  
 下面是一些有用的小技巧/参数:
  
 lsin () 用于过滤数据帧。Isin () 有助于选择特定列中具有特定(或多个)值的行。
   在SQL中我们可以使用      SELECT * FROM … WHERE ID in (‘A001’,‘C022’, …)来获取含有指定ID的记录。如果你也想在Pandas中做类似的事情,你可以使用:
  
 select_dtypes() 的作用是,基于 dtypes 的列返回数据帧列的一个子集。这个函数的参数可设置为包含所有拥有特定数据类型的列,亦或者设置为排除具有特定数据类型的列。
  
 pivot_table( ) 也是 Pandas 中一个非常有用的函数。如果对 pivot_table( ) 在 excel 中的使用有所了解,那么就非常容易上手了。
  
 如果需要计算样本的缺失率分布,只要加上参数axis=1
  
 分为分组中有重复值和无重复值两种。无重复值的情况。
  
 先按Mt列进行分组,然后对分组之后的数据框使用idxmax函数取出Count最大值所在的列,再用iloc位置索引将行取出。有重复值的情况
  
 对ID进行分组之后再对分数应用rank函数,分数相同的情况会赋予相同的排名,然后取出排名为1的数据。
  
 介绍两种高效地组内排序的方法。
  
 用这种方式转换第三列会出错,因为这列里包含一个代表 0 的下划线,pandas 无法自动判断这个下划线。为了解决这个问题,可以使用 to_numeric() 函数来处理第三列,让 pandas 把任意无效输入转为 NaN。
   df = df.apply(pd.to_numeric, errors='coerce').fillna(0)
  
 方法一:只读取切实所需的列,使用usecols参数
  
 方法二:把包含类别型数据的 object 列转换为 Category 数据类型,通过指定 dtype 参数实现。
  
 希望本文的内容对大家的学习或者工作能带来一定的帮助,每天进步一点点,加油~