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:是否将变量修改,默认并不会修改原变量值
举例
- 删除某行,默认是删除行
>df.drop(labels=行名)
>df.drop(index=行名)
>df.drop(行名)
- 删除某列
> df.drop(列名,axis=1)
> df.drop(columns=列名)
索引
- set_index
作用:将某列设置单索引和符合索引
DataFrame.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)
参数
- append:添加新索引
- drop:False则会保留旧索引到新列中,True则会删除旧的索引
- inplace:是否将变量进行修改
- 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.0two y 2.0
foo one x 3.0two w 4.0In [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
数据切分
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. ]))
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])
统计数目
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软粘 5Name: 触感, dtype: int64In [10]: pd.value_counts([1,2,3,4,2])
Out[10]:2 24 13 11 1dtype: int64In [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,可出现多个值
其他
factorize
将对象进行编码,将其编辑为enumerate或者为categorical variable
pandas.factorize(values, sort=False, na_sentinel=- 1, size_hint=None)[source]
- values:转换的对象
- sort:是否排序
- na_sentinel =
- pd.get_dummies(df,drop_first=True)
合并、拼接
- 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 ddtype: 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 a1 b
s2 0 c1 d
dtype: object
官方文档
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]})
>>>df1lkey value
0 foo 1
1 bar 2
2 baz 3
3 foo 5
>>>df2rkey 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
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
排序
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])
- 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])
pandas及numpy笔记相关推荐
- Python numpy+pandas+matplotlib学习笔记
Python numpy+pandas+matplotlib 本文是根据b站路飞学城Python数据分析全套教程的学习视频整理归纳的学习文档,主要目的是方便自己进行查阅,详细的还得去b站看原视频.另外 ...
- 【Python】Pandas、Numpy性能优化秘籍(全)
pandas.numpy是Python数据科学中非常常用的库,numpy是Python的数值计算扩展,专门用来处理矩阵,它的运算效率比列表更高效.pandas是基于numpy的数据处理工具,能更方便的 ...
- pandas基础学习笔记(简略版)
pandas基础学习笔记(简略版) 1.DataFrame 2.series 3.基本数据操作 4.DataFrame 运算 5.pandas绘图 6.文本的读取与存储 1.DataFrame 既有行 ...
- python获取matplotlib、tensorflow、pandas、numpy等的版本version
python获取matplotlib.tensorflow.pandas.numpy的版本version python包.库之间会发生版本冲突.那么你就需要查明版本,然后确定是降级还是升级: 使用__ ...
- numpy 笔记: random模块
1 基本应用 randint 随机生成大小为size的正整数ndarray low.high.size三个参数.默认high是None,如果只有low,那范围就是[0,low).如果有high,范围就 ...
- panda python_12个很棒的Pandas和NumPy函数,让分析事半功倍
本文转载自公众号"读芯术"(ID:AI_Discovery) 大家都知道Pandas和NumPy函数很棒,它们在日常分析中起着重要的作用.没有这两个函数,人们将在这个庞大的数据分析 ...
- 12个很棒的Pandas和NumPy函数,让python数据分析事半功倍
大家都知道Pandas和NumPy函数很棒,它们在日常分析中起着重要的作用.没有这两个函数,人们将在这个庞大的数据分析和科学世界中迷失方向. 今天,小芯将分享12个很棒的Pandas和NumPy函数, ...
- Python中用pandas将numpy中的数组数据保存到csv文件
Python中用pandas将numpy中的数组数据保存到csv文件 本博客转载自:[1]https://blog.csdn.net/grey_csdn/article/details/7018587 ...
- python怎样装pandas_小白学python:坑一:如何安装pandas和numpy
学python,需要安装各种各样的包,这对初学者来说,是个很大的坑.以pandas和numpy为例: 1. 需要安装好python.pip,并下载了和自己电脑版本一致的pandas: 2.安装了py ...
- python3.6安装pandas_python3.6更新pandas和numpy包
python3.6更新包 python 3.6更新pandas1.0和numpy包 更新pandas 更新numpy python 3.6更新pandas1.0和numpy包 pandas版本过低的话 ...
最新文章
- javca中redis获取value_接口测试:如何从redis中获取短信验证码
- 基于struts2的寝室圈项目
- 【Linux】一步一步学Linux——gzip命令(63)
- java高性能阻塞队列,Linux c/c 后台开发组建之:高性能阻塞队列
- 目录操作相关的系统函数
- pythonselenium一个简单的自动化测试实战:百度搜索
- 自动根据键盘位置调整UITextView的高度
- C++语言实现-邻接矩阵
- 解析鸿蒙内核消息队列QueueMail接口的哼哈二将
- Selenium的一些技巧与错误处理
- Zookeeper-入门-安装
- 基于ASP.NETAJAX的WebPart开发与部署-转
- webstorm中文乱码问题
- 201703:SuiteCRM自定义筛选界面
- 5分钟商学院-个人篇-谈判能力
- 算法设计与分析 ——10-7课程总结
- WIN10下msi GE62 1077 无线热点掉线问题处理(更新:取消自动关闭热点
- 服务器柜机位置摆放电子图,柜式空调摆放位置有什么要注意的吗
- 【已解决】Activity MainActivity has leaked window PhoneWindow$DecorView@ that was originally added here
- java红宝石是哪本_以月/年红宝石显示帖子
热门文章
- Mark:SQL Server关于CAST和CONVERT的区别和用法
- Winform 可取消的单选按钮(RadioButton)
- 关于重定向printf出错 Error[Pe020]: identifier FILE is undefined 解决方案
- JVM故障分析系列之四:jstack生成的Thread Dump日志线程状态
- Struts2的学习-属性驱动和模型驱动
- Python学习笔记(2) Python提取《釜山行》人物关系
- thinkphp建站-前后台文件配置
- Silverlight 数据绑定(Binding)
- ConvMF论文解读
- 师妹问我:如何在7分钟内彻底搞懂word2vec?