pandas及numpy笔记

概述

此博客将会持续更新,会将numpy、pandas、matplotlib等库进行函数解释,以及示例演示.

这博客更像是一个笔记,让你在某些函数记不住的时候来查一下,而不是一本书一样,给你详细的讲解

附上官方文档地址

数据
	所使用的数据集将从下列作为目标使用,可以用这些数据自己实验

数据1.1

[
	   ['青绿', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', '是'],
       ['乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', '是'],
       ['乌黑', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', '是'],
       ['青绿', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', '是'],
       ['浅白', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', '是'],
       ['青绿', '稍蜷', '浊响', '清晰', '稍凹', '软粘', '是'],
       ['乌黑', '稍蜷', '浊响', '稍糊', '稍凹', '软粘', '是'],
       ['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '硬滑', '是'],
       ['乌黑', '稍蜷', '沉闷', '稍糊', '稍凹', '硬滑', '否'],
       ['青绿', '硬挺', '清脆', '清晰', '平坦', '软粘', '否'],
       ['浅白', '硬挺', '清脆', '模糊', '平坦', '硬滑', '否'],
       ['浅白', '蜷缩', '浊响', '模糊', '平坦', '软粘', '否'],
       ['青绿', '稍蜷', '浊响', '稍糊', '凹陷', '硬滑', '否'],
       ['浅白', '稍蜷', '沉闷', '稍糊', '凹陷', '硬滑', '否'],
       ['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '软粘', '否'],
       ['浅白', '蜷缩', '浊响', '模糊', '平坦', '硬滑', '否'],
       ['青绿', '蜷缩', '沉闷', '稍糊', '稍凹', '硬滑', '否']
]
labels=['色泽', '根蒂', '敲声', '纹理', '脐部', '触感', '结果']

pandas

数据总览

pd.DataFrame.describe()
pd.DataFrame.info()

dtypes:

返回一个Series类型的数据,显示不同列对应的相应类型

示例

      col_name col_type
0           Id    int64
1   MSSubClass    int64
2     MSZoning   object
3  LotFrontage  float64
4      LotArea    int64
#以上为例子
#将object类型的列分离出来
obj_li = []
num_li = []

for i in range(df.shape[0]):
	if df.loc[i]['col_type'] == 'object':
		obj_li.append(df.lov[i]['col_name'])
	else:
		obj_li.append(df.lov[i]['col_name'])


类型转变

将某列的类型进行转变

to_numeric

pandas.to_numeric(arg, errors='raise', downcast=None)

将参数转变为numeric类型
>>>s = pd.Series(['1.0', '2', -3])
>>>pd.to_numeric(s)
0    1.0
1    2.0
2   -3.0
astype

DataFrame.astype(dtype, copy=True, errors='raise')

删除

Dataframe.drop(self, labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')

参数

  • labels:指定删除行列的名字
  • axis:默认为0,指删除行,1为删除列
  • index:指定删除行
  • columns:指定删除列
  • inplace:是否将变量修改,默认并不会修改原变量值

举例

  1. 删除某行,默认是删除行
>df.drop(labels=行名)
>df.drop(index=行名)
>df.drop(行名)
  1. 删除某列
> df.drop(列名,axis=1)
> df.drop(columns=列名)
索引
  1. set_index

作用:将某列设置单索引和符合索引

DataFrame.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)

参数

  • append:添加新索引
  • drop:False则会保留旧索引到新列中,True则会删除旧的索引
  • inplace:是否将变量进行修改
  1. reset_index

作用:还原索引,将index变为列

```DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill=”) ```

参数

  • level:控制了具体要还原的那个等级的索引
  • drop:False则索引列会被还原为普通列,True将索引丢掉
  • inplace:修改变量

In [318]: data
Out[318]: 
         c    d
a   b          
bar one  z  1.0
    two  y  2.0
foo one  x  3.0
    two  w  4.0
 
In [319]: data.reset_index()
Out[319]: 
     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
数据切分
  1. pd.cut

    按值的大小均匀切分,每组区间大小相同但样本数可能不同

pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise', ordered=True)

参数

  • x:目标输入值
  • bins:数据类型,设置划分的组数或者指定组局
    • int
    • sequence
    • IntervalIndex
  • retbins:bool,default=False,为True时额外返回bins,即每个边界值
  • labels:array 或 bool,默认为None。传入数据时,分组的名称由label指示;传入为False时则仅显示分组下标
  • precision:精度,默认为3
    是否选择返回bins,根据示例查看区别

示例

  • bins为int类型,将x划分为bins段
>>>pd.cut(np.array([1, 7, 5, 4, 6, 3]), 3)
#这是将x中每个值转化到对应的分段中
[(0.994, 3.0], (5.0, 7.0], (3.0, 5.0], (3.0, 5.0], (5.0, 7.0], (0.994, 3.0]]
#根据bins将x的范围进行划分为bins段
Categories (3, interval[float64]): [(0.994, 3.0] < (3.0, 5.0] < (5.0, 7.0]]

  • 设置retbins=True
>>> pd.cut(np.array([1, 7, 5, 4, 6, 3]), 3,retbins=True)
([(0.994, 3.0], (5.0, 7.0], (3.0, 5.0], (3.0, 5.0], (5.0, 7.0], (0.994, 3.0]]
 Categories (3, interval[float64]): [(0.994, 3.0] < (3.0, 5.0] < (5.0, 7.0]],
 array([0.994, 3.   , 5.   , 7.   ]))
  1. pd.qcut

    按照样本在在值上的分布频率进行切分,每组样本数相同,但是划分区间可能不同

pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise')

参数

  • x:ndarray或Series

  • q:指示划分的组数,q一般小于len(x)并且被x整除

  • labels:array 或 bool,默认为None。当传入数组时,分组的名称由label指示,当传入False时,仅显示分组下标

  • retbins:bool,默认为False,当为True是,额外返回bins,即每个边界值

  • precision:int,精度,默认为3

    • float类型的list

示例

>>>pd.qcut(range(5), 4)
[(-0.001, 1.0], (-0.001, 1.0], (1.0, 2.0], (2.0, 3.0], (3.0, 4.0]]
Categories (4, interval[float64]): [(-0.001, 1.0] < (1.0, 2.0] ...

>>>pd.qcut(range(5), 3, labels=["good", "medium", "bad"])
[good, good, medium, bad, bad]
Categories (3, object): [good < medium < bad]


>>>pd.qcut(range(5), 4, labels=False)
array([0, 0, 1, 2, 3])
统计数目
  1. value_counts

    返回一个Series类型数据
    对一维的数据进行统计,迭代类型都可以

value_counts( values, sort: bool = True, ascending: bool = False, normalize: bool = False, bins=None,dropna: bool = True,)

In [9]: pd.value_counts(df['触感'])
Out[9]:
			硬滑    12
			软粘     5
			Name: 触感, dtype: int64

In [10]: pd.value_counts([1,2,3,4,2])
Out[10]:
			2    2
			4    1
			3    1
			1    1
			dtype: int64

In [11]: res = pd.value_counts([1,2,3,4,2])
In [12]: type(res)
Out[12]: pandas.core.series.Series

2.mode
DataFrame.mode(axis=0, numeric_only=False, dropna=True)
Get the mode(s) of each element along the selected axis.:对某个轴进行统计,即为行或者列
统计出现次数最多的value,可出现多个值

其他
  1. factorize

    将对象进行编码,将其编辑为enumerate或者为categorical variable

pandas.factorize(values, sort=False, na_sentinel=- 1, size_hint=None)[source]

  • values:转换的对象
  • sort:是否排序
  • na_sentinel =
  1. pd.get_dummies(df,drop_first=True)
合并、拼接
  1. pd.concat

pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True)

沿着一条轴将多个对象对堆叠到一起

参数

  • objs:需要进行连接的对象,[obj1,obj2]
  • axis:axis=0,表示在水平方向(row)上进行连接;axis=1表示在垂直方向(column)进行连接
  • join:outer表示index全部需要,inner表示只取index重合的部分
  • join_axes:传入需要保留的index
  • ignore_index:忽略需要连接的frame本身的index。当原本的index没有特别意义的时候可以使用
  • keys:可以给每个需要连接的df一个label

示例

  • 合并两个Series
>>>s1 = pd.Series(['a', 'b'])
>>>s2 = pd.Series(['c', 'd'])
>>>pd.concat([s1, s2],axis=0)
0    a
1    b
0    c
1    d
>>>pd.concat([s1,s2].axis=1)
0 a c
1 b d

dtype: object
  • 设置ignore_index属性为True
>>>pd.concat([s1,s2],ignore_index=True)
0    a
1    b
2    c
3    d
dtype: object
  • 添加一个分层的index
>>>pd.concat([s1, s2], keys=['s1', 's2'])
s1  0    a
    1    b
s2  0    c
    1    d
dtype: object

官方文档

  1. merge

    通过键拼接列,可以根据一个或多个键将不同的DataFrame的行连接起来

pandas.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)

参数

  • left,right:要合并的两个DataFrame对象
  • on:指的是合并(连接)的方式,由inner(内连接),left(左外连接),right(右外连接),outer(全外连接),默认为inner
  • left_on,right_on:选择将left对象和right对象进行合并时根据的列值

示例

>>>df1 = pd.DataFrame({'lkey': ['foo', 'bar', 'baz', 'foo'],
                    'value': [1, 2, 3, 5]})
>>>df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'baz', 'foo'],
                    'value': [5, 6, 7, 8]})
>>>df1
    lkey value
0   foo      1
1   bar      2
2   baz      3
3   foo      5
>>>df2
    rkey value
0   foo      5
1   bar      6
2   baz      7
3   foo      8
>>>df1.merge(df2, left_on='lkey', right_on='rkey')
  lkey  value_x rkey  value_y
0  foo        1  foo        5
1  foo        1  foo        8
2  foo        5  foo        5
3  foo        5  foo        8
4  bar        2  bar        6
5  baz        3  baz        7
  1. pd.join

    拼接列,主要用于索引上的合并

join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)

参数

转置,颠倒

将原来的index与column进行交换

>>> x1 = {1: 106, 2: 3, 7: 42}
>>> a = x1.keys()
>>> b = x1.values()
>>> df = pd.DataFrame([a,b],index=['type', 'cnt'])#创建dataframe
>>> df2 = pd.DataFrame(df.values.T, index=df.columns, columns=df.index)#转置
>>> print(df)
        0  1   2
type    1  2   7
cnt   106  3  42
>>> print(df2)
   type  cnt
0     1  106
1     2    3
2     7   42
>>>

numpy

排序
  1. np.argsort(x)
    官方文档

    对值进行排序,但是返回值对应的index,默认从小到大

参数

  • a:array_like
  • axis:
  • kind:{“quicksort”,“mergesort”,“heapsort”,“stable”}
    • 选择排序算法

示例

>>>x = np.array([3, 1, 2])
>>>np.argsort(x)
array([1, 2, 0])
  1. np.sort(x)

对x的值进行排序

扩展

对numpy.array类型添加一列

np.insert
numpy.insert(arr, obj, values, axis=None)
从示例中即可明白各个参数

参数

  • values:设置添加的值
  • axis:axis=0,在行上添加,axis=1,在列上添加
  • arr:在arr上进行添加
  • obj:这是设置添加的位置
>>>a = np.array([[1, 1], [2, 2], [3, 3]])
>#在a上第0列添加
>>>np.insert(a,0,values=1,axis=1)
array([[0, 1, 1],
       [0, 2, 2],
       [0, 3, 3]])
numpy.hstack

在行上进行扩展,

示例

>>>a = np.array((1,2,3))
>>>b = np.array((2,3,4))
>>>np.hstack((a,b))
array([1, 2, 3, 2, 3, 4])
>>>a = np.array([[1],[2],[3]])
>>>b = np.array([[2],[3],[4]])
>>>np.hstack((a,b))
array([[1, 2],
       [2, 3],
       [3, 4]])
numpy.vstack
其他
clip

numpy.clip(a, a_min, a_max, out=None, **kwargs)
clip官方文档

参数

  • a:array-like
  • a_min:设置下限,若是小于这个值的都被设置为a_min
  • a_max设置上限,大于a_max则变为a_max
  • out:ndarry,选填

示例

a = np.arange(10)
np.clip(a, 1, 8)
array([1, 1, 2, 3, 4, 5, 6, 7, 8, 8])
a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.clip(a, 3, 6, out=a)
array([3, 3, 3, 3, 4, 5, 6, 6, 6, 6])
a = np.arange(10)
a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.clip(a, [3, 4, 1, 1, 1, 4, 4, 4, 4, 4], 8)
array([3, 4, 2, 3, 4, 5, 6, 7, 8, 8])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值