Pandas 基本语法(一)

      
Pandas 目录
             1、Pandas 基本语法(一)
             2、Pandas 基本语法(二)
             3、持续更新中…
      
      

Pandas 的基本语法(一)

pandas是一种Python数据分析的利器,是一个开源的数据分析包,最初是应用于金融数据分析工具而开发出来的,因此pandas为时间序列分析提供了很好的支持。pandas是PyData项目的一部分。

Series

简单地可以认为是一维数组

  • Series 是一种类似一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成,即index和values两部分,可以通过索引的方式选取Series中的单个或一组值。

DataFrame

简单地可以认为是二维数组

  • 一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame即有行索引也有列索引,可以被看做是由Series组成的字典。

删除行或列

  • Pandas 提供了一个便捷的方法 drop() 函数来删除我们不想要的列或行。
df = df.drop(columns=['列名'])   # drop colunms
df = df.drop(index=['行名'])    # drop index

重命名列名或索引名

  • 如果你想对 DataFrame 中的 columns 进行重命名,可以直接使用 rename(columns=new_names, inplace=True) 函数
  • 如果你想对 DataFrame 中的 index 进行重命名,可以直接使用 rename(index=new_names, inplace=True) 函数

inplace = True ,表示在原数据表上修改,若值为False,则不对原数据表修改

处理索引

  • reindex()与set_index()和reset_index()的用法

reindex()方法用于创建一个符合新索引的新对象

对于Series类型,调用reindex()会将数据按照新的索引进行排列,如果某个索引值之前不存在,则引入缺失值
DataFrame中,reindex()可以改变行索引和列索引

set_index()即设置索引。可以设置单索引和复合索引

DataFrame中的index 作为新索引

In []: indexed = df.set_index(['a', 'b'])
  		 # indexed.index.name=None
       indexed
Out[]: 
         c    d
a   b          
bar one  z  1.0
    two  y  2.0
foo one  x  3.0
    two  w  4.0

 # 如果觉得 a b 不美观,可以输入 indexed.index.name=None

reset_index(),它是set_index()的反操作,调用它分层索引的索引层级会被还原到列中

In []: df.reset_index()
Out[]: 
     a    b  c    d
0  bar  one  z  1.0
1  bar  two  y  2.0
2  foo  one  x  3.0
3  foo  two  w  4.0

reset_index, 使索引按0,1,2,3,4开始递增
set_index ,将dataframe其中某列作为索引
reindex 设置新索引, 不存在的index对应的数据为Nan

数据切片loc & iloc

  • loc: select by labels
data_loc = df.loc['行索引','列索引']  # Take a value
  • iloc:select by position
data_iloc = df.iloc[num1,num2]  # demo: df.iloc[:3,4] 
  • ix已经不被推荐使用,建议使用loc 和 iloc 实现ix,这里就不述说了

数据处理

  • 去除含有NAN数据行/列
df = df.dropna()  # default: axis=0, how='any'  意思是只要有nan,就删除一行,how='any|all';若how='all',则代表当一行全为nan,才会删除。若把axis=0改为1,则代表删除列。
# dropna()全部默认参数为:axis=0, how=‘any’, thresh=None, subset=None, inplace=False
# thresh = n,表示至少保留含有n个非nan值的行/列
# subset定义要在哪些列中查找缺失值
# inplace = True 表示在原数据表上修改,反之相反。
  • 去重复的值
df = df.drop_duplicates() # 去除重复行

数据合并

​ 提供了concat,merge,join和append四种方法用于dataframe的拼接,其区别如下:

  • 函数concat()
  • pandas.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=None, copy=True) 
    # comment
    objs:series,dataframe或者是panel对象构成的序列lsit
    axis:指明连接的轴向, {0/’index’(行), 1/’columns’(列)},默认为0
    join:指明连接方式 , {‘inner’(交集), ‘outer(并集)’},默认为outer
    join_axes:自定义的索引。(可以指定按照哪个表中的索引为参考值)指明用其他n-1条轴的索引进行拼接, 而非默认join =’ inner’或’outer’方式拼接
    keys:创建层次化索引。可以是任意值的列表或数组、元组数组、数组列表(如果将levels设置成多级数组的话)
    ignore_index=True:重建索引
    

两个DataFrame通过pd.concat(),既可实现行拼接又可实现列拼接,默认axis=0,join=‘outer’。表df1和df2的行索引(index)和列索引(columns)均可以重复。

  • 函数merge()

  • DataFrame.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
    # comment
    left和right:两个不同的DataFrame或Series
    how:连接方式,有inner、left、right、outer,默认为inner
    on:用于连接的列索引名称,必须同时存在于左、右两个DataFrame中,默认是以两个DataFrame列名的交集作为连接键,若要实现多键连接,‘on’参数后传入多键列表即可
    left_on:左侧DataFrame中用于连接键的列名,这个参数在左右列名不同但代表的含义相同时非常有用;
    right_on:右侧DataFrame中用于连接键的列名
    left_index:使用左侧DataFrame中的行索引作为连接键( 但是这种情况下最好用JOIN)
    right_index:使用右侧DataFrame中的行索引作为连接键( 但是这种情况下最好用JOIN)
    sort:默认为False,将合并的数据进行排序,设置为False可以提高性能
    suffixes:字符串值组成的元组,用于指定当左右DataFrame存在相同列名时在列名后面附加的后缀名称,默认为(’_x’, ‘_y’)
    copy:默认为True,总是将数据复制到数据结构中,设置为False可以提高性能
    indicator:显示合并数据中数据的来源情况
    

类似于关系型数据库的连接方式,可以根据一个或多个键将两张不同的DatFrame连接起来,由于默认how=‘inner’,故合并表仅保留key重名的行,不重名的行将被丢弃。( 备注: merge()只能完成两张表的连接,若有三个及以上表,需不断两两合并来实现)
该函数的典型应用场景: 两张表有相同内容的某一列(类似SQL中的主键),欲根据主键将两张表进行列拼接整合到一张表中,合并表的列数等于两个原数据表的列数和减去连接键的数量。

-函数join()

  • DataFrame.join(other, on=None, how='left', lsuffix=' ', rsuffix=' ', sort=False)
    # comment
    参数的意义与merge方法基本相同,只是join方法默认为左外连接how=’left’
    

该函数的典型应用场景:无重复列名的两个表df1和df2 基于行索引进行列拼接,直接使用df1.join(df2)即可,无需添加任何参数,合并表的行数与left表相同,列数为left表+right表的列数之和,结果仅保留left表和right表中行索引相同的行,对列不做任何处理。如果两个表有重复的列名,需指定lsuffix, rsuffix参数。

  • 函数append()

  • DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=None)
    # comment
    other: DataFrame or Series/dict-like object, or list of these
    The data to append.
    ignore_index : boolean, default False
    If True, do not use the index labels.
    verify_integrity : boolean, default False
    If True, raise ValueError on creating index with duplicates.
    sort: boolean, default None
    

append是concat的简略形式,只不过只能在axis=0上进行合并

后续持续更新…………
评论下方,分享md笔记

猜你喜欢

转载自blog.csdn.net/weixin_45215649/article/details/107612186