pandas

主要内容:

import pandas as pd
from pandas import Series, DataFrame
import numpy as np

Series是一种类似与一维数组的对象,由下面两个部分组成:values:一种数据类型;index:相应的数据索引标签.Series的创建

   a :两种创建 方式

    1) 由列表和numpy数组组建,默认索引为0.

Series(data=[1,2,3,4], index=['ds','dsa','re','gr'], name='haha')

# 使用numpy创建Series
Series(data=np.arange(10,60,6))

    2) 由字典创建: 不能再使用index, 但是依然存在默认索引.  注意: 数据源必须为一维数据

dic = {
    'math':100,
    'english':50
}
Series(data=dic, name='qimo')

 b: Series的索引和切片

    1) 显示索引:使用index中的元素作为索引值 使用s.loc: 注意loc中括号中放置的一定是显示索引

    2) 隐式索引: 使用整数作为索引值.使用s.iloc[]

s = Series(np.random.randint(60,100, size=(5,)), index=['a','b','c','d','e'] )
s.loc['a']

s.iloc[1]
s.iloc[[1,2,3]]

    3 显示索引切片和隐式索引切片: s.loc['a':'c']

    4)  Series的基本概念

      可以把Series看成一个定长的有序字典 向series增加一行: 相当于给字典增加一组键值对;

s['g'] = 100
s

      可以通过shape,size, index, values等得到series的属性

s.index
s.values

      可以使用s.head(), tail分别查看前几个和后几个值

 s.head(3)
s.tail(3)

      对Series元素进行去重

# 对Series元素进行去重
s = Series(data=[1,1,2,2,3,3,4,4,4,5,6,7,8,7,7,66,43,342,6665,444,333,444])
s.unique()    #Series中的去重函数

      空值检测过滤.可以使用pd.isnull(), pd.notnull(), 或s.isnull()

s1 = Series(data=[1,2,3,4,5],index=['a','b','c','d','e'])
s2 = Series(data=[1,2,3,4,5],index=['a','b','c','f','g'])
s = s1+s2
s# 有空值
#进行空值过滤
s.loc[s.notnull()]

    5) Series运算

      在运算中自动补齐不同索引的数据

      如果索引不对应,则补nan

2 DataFrame

  a : DataFrame的概念

      DataFrame是一个表格型的数据结构, 其由按一定顺序排列的多列数据组成.设计初衷是由Series的使用场景从一维拓展到多维. DataFrame既有行索引也有列索引 . index行索引, columns列索引, values值

  b : DataFrame的创建

      最常用的方法是传递一个字典来创建.DataFrame以字典的键作为每一列的名称,以字典的值(一个数组)作为每一列

dic = {
    'java':[60,70,80],
    'python':[100,100,100]
}
DataFrame(data=dic, index=['zhangsan','lisi','wangwu'])

t

df = DataFrame(data=np.random.randint(60,100,size=(3,3)),index=['a','b','c'],columns=['A','B','C'])

  c : DataFrame索引

      对列进行索引,通过类似字典的方式df['q'] 通过属性的方式 df.q 可以将DataFrame的列获取为一个series,返回的series拥有原DataFrame相同的索引,且name属性也已经设置哈, 就是相应的列名.

df = DataFrame(data=np.random.randint(60,150,size=(4,2)),index=['chinese','math','english','lizong'],columns=['zhangsan','li'])
df  

# 对列进行索引
df['li']

df[['zhangsan','li']]

# 对行进行索引
    -使用.loc[]加index进行索引
    -使用.iloc[]加整数来进行索引
# 同样返回一个series,index为原来的column
# 对前两行求索引
  df.iloc[[0,1]]

   d : 切片

      直接用中括号时: 索引表示的是列索引, 切片表示的是行切片

df = DataFrame(data=np.random.randint(60,150,size=(4,2)),index=['chinese','math','english','lizong'],columns=['zhangsan','li'])
df  

df['math':'lizong']

      在loc和iloc中使用切片(切列): df.loc[:, 'zhangsan':'li']

   e : DataFrame的运算

df1=df.copy()

df.index=['math','lizong','a','b']
df1

df1.zhangsan.loc['math']=0
df1.loc['math','zhangsan']=1

  f 创建多层索引

    隐式构造: 最常见的方法就是给DataFrame构造函数的index或者columns参数传递两个或者更多的数组.

# 创建了一个索引对象,该索引对象为二层索引
df = DataFrame(np.random.randint(60,100,size=(2,4)),index=['tom','jay'],columns=[['qizhong','qimo','qizhong','qimo'],['chinese','math','chinese','math']])
df

    显示构造: pd.MultIndex.from_

col = pd.MultiIndex.from_product([['qizhong','qimo'],['chinese','math']])
df = DataFrame(data=np.random.randint(60,120,size=(2,4)),columns=col, index=['tom','joy'])
df

  h 处理空值,处理丢失数据

    有两种丢失数据: None和np.NaN

1 None None是Python自带的, 其类型为python object.因此,None不能参与到任何运算中.
2 np.nan np.nan是浮点类型,能参与到运算中.但计算的结果总是nan
np.random.seed(10)
df=DataFrame(np.random.randint(50,200,size=(6,5)), index=['a','d','f','g','t','j'],columns=['D','R','G','E','M'])
df

# 将某些数组元素赋值为nan
df.iloc[1,3]=None
df.iloc[2,2]=np.nan
df.iloc[4,2]=None
df
#处理空值
df.loc[df.notnull().all(axis=1)]

    过滤df中的空值(只保留没有空值的行)

      df.dropna()可以选择过滤的是行还是列: axis=0默认是行,1表示的是列

      df.drop()  通过label指定要删除的行或者列

      df.fillna()  填充函数

np.random.seed(10)
df=DataFrame(np.random.randint(50,200,size=(6,5)), index=['a','d','f','g','t','j'],columns=['D','R','G','E','M'])
df
# drpna函数过滤空值
df.dropna(axis=0, inplace=True)
df

# drop函数去除指定的列
df.drop(labels='D', axis=1)


#填充函数:  fillna():  value和method参数
df.fillna(method='bfill',axis=0,limit=1)

可以选择向前填充或者向后填充
method控制填充的方式    bfill  ffill

  l pandas的拼接操作:   见数据分析第一天

pandas的拼接分两种:
    级联: pd.concat,  pd.append
    合并: pd.merge,   pd.join

  

 

原文地址:https://www.cnblogs.com/gyh412724/p/10315695.html