Pandas

一、Pandas与NumPy的区别

如果用 python 的列表和字典来作比较, 那么可以说 Numpy 是列表形式的,没有数值标签,而 Pandas 就是字典形式。Pandas是基于Numpy构建的,让Numpy为中心的应用变得更加简单。

二、导入模块

  import Pandas as pd #为了方便使用Pandas 采用pd简写

三、Series

Series的字符串表现形式为:索引在左边,值在右边。由于我们没有为数据指定索引。于是会自动创建一个0到N-1(N为长度)的整数型索引。

  s = pd.Series([1,3,6,np.nan,44,1])

四、DataFrame

(1)创建方法一

  dates = pd.date_range('20160101',periods=6)
  df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=['a','b','c','d']) 

(2)创建方法二

  df2 = pd.DataFrame({'A' : 1.,
                'B' : pd.Timestamp('20130102'),
                'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
                'D' : np.array([3] * 4,dtype='int32'),
                'E' : pd.Categorical(["test","train","test","train"]),
                'F' : 'foo'})

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

(3)根据每一个不同的索引来挑选数据, 比如挑选 b 的元素

  df['b']

(4)查看数据中的类型

  df2.dtypes

(5)查看对列的序号

  df2.index

(6)查看每种数据的名称

  df2.columns

(7)查看所有DateFrame的值

  df2.values

(8)数据的总结

  df2.describe()

(9)翻转数据(transpose)

  df2.T

(10)对数据的 index 进行排序

  df2.sort_index(axis=1, ascending=False)

(11)对数据值排序

  df2.sort_values(by='B')

五、选择数据

(1)简单筛选

  df['A']

  df.A

(2)切片筛选(让选择跨越多行或多列)

  df[0:3]

  df['20130102':'20130104']

(3)使用标签来选择数据(loc) :代表所有行

  df.loc['20130102']

  df.loc[:,['A','B']]

  df.loc['20130102',['A','B']]

(4)根据位置进行选择(iloc)

  df.iloc[3,1]

  df.iloc[3:5,1:3]

  df.iloc[[1,3,5],1:3]

(5)混合选择(ix)

  df.ix[:3,['A','C']]

(6)通过判断的筛选

  df[df.A>8]

六、设置值

(1)根据位置设置(loc 和 iloc)

  df.iloc[2,2] = 1111
  df.loc['20130101','B'] = 2222

(2)根据条件设置

  df.B[df.A>4] = 0

(3)按行或列设置

  df['F'] = np.nan

(4)添加数据

  df['E'] = pd.Series([1,2,3,4,5,6], index=pd.date_range('20130101',periods=6)) 

七、处理丢失数据

有时候我们导入或处理数据, 会产生一些空的或者是 NaN 数据,如何删除或者是填补这些 NaN 数据呢?

(1)直接去掉有 NaN 的行或列(dropna)

  df.dropna(
        axis=0,     # 0: 对行进行操作; 1: 对列进行操作
        how='any'   # 'any': 只要存在 NaN 就 drop 掉; 'all': 必须全部是 NaN 才 drop 
  ) 

(2)将 NaN 的值用其他值代替

  df.fillna(value=0)

(3)判断是否有缺失数据 NaN ,为 True 表示缺失数据

  df.isnull() 

(4)检测在数据中是否存在 NaN, 如果存在就返回 True(表格太大不好看)

  np.any(df.isnull()) == True

八、Pandas导入导出

  pandas可以读取与存取的资料格式有很多种,像csv、excel、json、html与pickle等… 详细请看[官方说明文件](https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html)

(1)读取CSV(excel可以打开)

  data = pd.read_csv('student.csv')

(2)将资料存取成pickle

  data.to_pickle('student.pickle')

九、Pandas合并

pandas处理多组数据的时候往往会要用到数据的合并处理,使用 concat是一种基本的合并方式.而且concat中有很多参数可以调整,合并成你想要的数据形式。

(1)axis (合并方向)

  res = pd.concat([df1, df2, df3], axis=0) #concat纵向合并

(2)ignore_index (重置 index)

  res = pd.concat([df1, df2, df3], axis=0, ignore_index=True)

(3)join (合并方式)

  #纵向"外"合并df1与df2
  res = pd.concat([df1, df2], axis=0, join='outer')

依照column来做纵向合并,有相同的column上下合并在一起,其他独自的column个自成列,原本没有值的位置皆以NaN填充。

  #纵向"内"合并df1与df2
  res = pd.concat([df1, df2], axis=0, join='inner')

只有相同的column合并在一起,其他的会被抛弃。

(4)join_axes (依照 axes 合并)

  #依照`df1.index`进行横向合并
  res = pd.concat([df1, df2], axis=1, join_axes=[df1.index])

(5)append (添加数据)

append只有纵向合并,没有横向合并。

  res = df1.append(df2, ignore_index=True)

十、Pandas 合并 merge

pandas中的merge和concat类似,但主要是用于两组有key column的数据,统一索引的数据. 通常也被用在Database的处理当中。

(1)依据一组key合并

  res = pd.merge(left, right, on='key')

(2)依据两组key合并

  res = pd.merge(left, right, on=['key1', 'key2'], how='inner')

  res = pd.merge(left, right, on=['key1', 'key2'], how='outer')

  res = pd.merge(left, right, on=['key1', 'key2'], how='left')  #基于左边

  res = pd.merge(left, right, on=['key1', 'key2'], how='right') #基于右边

(3)Indicator

indicator=True会将合并的记录放在新的一列。

  res = pd.merge(df1, df2, on='col1', how='outer', indicator=True)

  # 自定indicator column的名称
  res = pd.merge(df1, df2, on='col1', how='outer', indicator='indicator_column')

(4)依据index合并

  res = pd.merge(left, right, left_index=True, right_index=True, how='outer')

(5)解决overlapping的问题 (区分名字相同但内涵不同的问题,比如男生的年龄和女生的年龄)

  res = pd.merge(boys, girls, on='k', suffixes=['_boy', '_girl'], how='inner')

十一、Pandas数据可视化

(1)导入模块

  import matplotlib.pyplot as plt

(2)Series可视化

  # 随机生成1000个数据
  data = pd.Series(np.random.randn(1000),index=np.arange(1000))

  # 为了方便观看效果, 我们累加这个数据
  data.cumsum()

  # pandas 数据可以直接观看其可视化形式
  data.plot()

  plt.show()

(3)Dataframe 可视化

  data = pd.DataFrame(
        np.random.randn(1000,4),
        index=np.arange(1000),
        columns=list("ABCD")
  )
  data.cumsum()
  data.plot()
  plt.show()

(4)scatter

  ax = data.plot.scatter(x='A',y='B',color='DarkBlue',label='Class1')
  data.plot.scatter(x='A',y='C',color='LightGreen',label='Class2',ax=ax)
  plt.show()
博客内容用于记录自己学习后的收获,如有侵权请联系我删除
原文地址:https://www.cnblogs.com/ptxiaochen/p/13653249.html