摘要:中面向行和面向列的操作基本是平衡的。用层次化索引,将其表示为更高维度的数据。使用浮点值表示浮点和非浮点数组中的缺失数据。索引的的格式化输出形式选取数据子集在内层中进行选取层次化索引在数据重塑和基于分组的操作中很重要。
我们在上一篇介绍了 NumPy,本篇介绍 pandas。
Pandas 是基于Numpy构建的,让以NumPy为中心的应用变的更加简单。
pandas的数据结构介绍Series
由一组数据(各种 NumPy 数据类型)和一组索引组成:
Values 和 index 属性:
给所创建的Series带有一个可以对各个数据点进行标记的索引:
与普通NumPy数组相比,可以通过索引的方式选取Series中的单个或一组值:
可将Series看成是一个定长的有序字典,它是索引值到数据值的一个映射(它可以用在许多原本需要字典参数的函数中)。
如果数据被存放在一个 python 字典中,可以直接通过这个字典来创建Series:
如果只传入一个字典,则结果Series中的索引就是原字典的键(有序排列),上面的states。
Series最重要的一个功能是在算数运算中自动对齐不同索引的数据:
Series对象本身及其索引都有一个name属性:
Series的索引可以通过赋值的方式就地修改:
DataFrame
是一个表格型的数据结构。既有行索引也有列索引。DataFrame中面向行和面向列的操作基本是平衡的。DataFrame中的数据是以一个或多个二维块存放的。用层次化索引,将其表示为更高维度的数据。
构建 DataFrame:直接传入一个由等长列表或 NumPy 数组组成的字典。
会自动加上索引,但指定列序列,则按指定顺序进行排列:
和Series一样,如果传入的列在数据中找不到,就会产生NA值:
通过赋值的方式进行修改:
通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series:
行也可以通过位置或名称的方式进行获取,比如用索引字段ix。
将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配。如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位都将被填上缺失值:
给不存在的列赋值会创建出一个新列,关键字del用于删除列:
通过索引方式返回的列是相应数据的视图,并不是副本,对返回的Series做的任何修改都会反映到源DataFrame上,通过series的copy方法即可显式地复制列。
另一种常见的数据形式是嵌套字典,如果将它传给DataFrame,解释为——外层字典的键作为列,内层键作为行索引。
对结果进行转置:
指定索引按序列:
由Series组成的字典差不多也是一样的用法:
设置了DataFrame的index和columns的 name 属性,这些信息也会被显示,values 属性以二维ndarray的形式返回DataFrame中的数据:
如果DataFrame各列的数据类型不同,值数组的数据类型就会选用能兼容所有列的数据类型(如 dtype = object)。
索引对象
pandas的索引对象,管理轴标签和其他元数据(如轴名称等)。
构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index,且Index对象是不可修改的:
Index的功能类似一个固定大小的集合:
重新索引
方法 reindex:创建一个适应新索引的新对象。
调用该Series的reindex将会根据新索引进行重排。如果某个索引值当前不存在,就引入缺失值。
对于时间序列这样的有序数据,重新索引时可能需要做一些差值处理:
对于DataFrame ,reindex可以修改行、列索引,或两个都修改。如果仅传入一列,则会重新索引行:
使用columns关键字可重新索引列:
同时对行、列进行索引:
ix标签索引功能:
丢弃制定轴上的项
drop方法返回的是一个在指定轴上删除了指定值的新对象:
对于DataFrame,可以删除任意轴上的索引值:
索引、选取和过滤
Series索引的工作方式类似于NumPy数组的索引,但Series的索引值不只是整数:
利用标签的切片运算,其包含闭区间(与普通 python 切片运算不同):
对DataFrame进行索引就是获取一个列:
或多个列:
这种索引方式的特殊情况:通过切片或布尔型数组选取行。
另一种用法是通过布尔型DataFrame进行索引(在语法上更像 ndarray):
专门的索引字段 ix,是一种重新索引的简单手段:
算术运算和数据对齐
pandas最重要的一个功能是对不同索引的对象进行算术运算。
对不同的索引对,取并集:
自动的数据对齐操作在不重叠的索引出引入了NA值,即一方有的索引,另一方没有,运算后该处索引的值为缺失值。
对DataFrame,对齐操作会同时发生在行和列上。
在算术方法中填充值
对运算后的NA值处填充一个特殊值(比如 0):
否则 e 列都是NaN值。
类似,在对Series和 DataFrame 重新索引时,也可以指定一个填充值:
用这几个特定字的,叫算术方法:add/ sub/ div/ mul ,即:加/减/除/乘。
DataFrame 和 Series 之间的运算
计算一个二维数组与其某行之间的差:
这个就叫做广播,下面的每行都做这个运算了。
默认情况下,DataFrame和Series之间的算术运算会将Series的索引匹配到DataFrame的列,然后沿着行一直向下广播:
得到
做加法 frame+series2,找不到的值就并集为NaN。
如果你希望匹配行,且在列上广播,则必须使用算术运算方法:
传入的轴号就是希望匹配的轴。
函数的应用和映射
NumPy的ufuncs可用于操作pandas对象,以abs为例:
DataFrame 的 apply 方法:将函数应用到各列或行所形成的一维数组上:
许多最为常见的数据统计功能都被封装为DataFrame的方法,无需使用apply方法。
除标量值外,传递给apply的函数还可以返回由多个值组成的Series:
用 applymap 得到frame中各个浮点值的格式化字符串:
Series有一个用于应用元素级函数的 map 方法:
排序和排名
sort_index方法:返回一个已排序的新对象
对于DataFrame,可以根据任意一个轴上的索引进行排序:
指定了axis=1,是对列进行排序。
默认按升序,降序用ascending=False:
对Series进行排序,可用方法sort_values():
在排序时,任何缺失值默认都会被放到Series末尾。
在DataFrame上,用by根据列的值进行排序:
根据多个列:
rank方法:默认情况下,rank是通过“为各组分配一个平均排名”的方式破坏平级关系的。
根据值在原数据中出现的顺序给出排名:
按降序进行排名:
DataFrame可以在行或列上计算排名:
带有重复值的轴索引
虽然许多pandas函数都要求标签唯一(如 reindex),但这不是强制性的。
带有重复索引的Series:
索引的is_unique属性可以判断它的值是否唯一。
带有重复索引的DataFrame:
在Pandas中,DataFrame.ix[i]和DataFrame.iloc[i]都可以选取DataFrame中第i行的数据,那么这两个命令的区别在哪里呢?汇总和计算描述统计ix可以通过行号和行标签进行索引,而iloc只能通过行号索引,即ix可以看做是loc和iloc的综合。
pandas对象拥有一组常用的数学和统计方法:用于从Series中提取单个值,或从DataFrame的行或列中提取一个Series。
跟Numpy数组方法相比,它们都是基于没有缺失数据的假设而构建的。
传入 axis=1 将会按行进行求和运算:
NA值会自动被排除,如 1.40+NaN=1.40, NaN+NaN=0.00。
通过skipna选项可以禁用该功能:(得到 1.40+NaN=NaN, NaN+NaN=NaN)
返回间接统计(输出了值所在的行名):
累计型的(样本值的累计和):
一次性产生多个汇总统计:
对于非数值型数据,describe会产生另外一种汇总统计:
相关系数与协方差
Series和DataFrame:
corr方法: 相关系数
cov方法:协方差
DataFrame的corrwith方法:计算其列或行跟另一个Series或DataFrame之间的相关系数。传入一个DataFrame计算按列名配对的相关系数,传入axis=1即可按行进行计算。
唯一值、值计数以及成员资格
从一维Series的值中抽取信息。
unique函数:得到Series中的唯一值数组
value_counts:用于计算一个Series中各值出现的频率:
Series按降序排列。value_counts是一个顶级pandas方法,可用于任何数组或序列。
isin:用于判断矢量化集合的成员资格,可用于选取Series或DataFrame列中数据的子集:
pandas的设计目标之一就是让缺失数据的处理任务尽量轻松。
pandas使用浮点值 NaN(Not a Number) 表示浮点和非浮点数组中的缺失数据。它只是一个便于被检测出来的标记而已。
python 内置的None值也会被当做NA处理(如 string_data[0]=None)。
滤掉缺失数据
对于一个Series, dropna返回一个仅含非空数据和索引值的Series:
通过布尔型索引也可以达到这个目的:
对于DataFrame对象,dropna默认丢弃任何含有缺失值的行:
丢弃全为NA的那些行,axis=1则丢弃列:
只想留下一部分参数,用thresh参数:
thresh=3:保留至少 3 个非空值的行,即一行中有 3 个值是非空的就保留.
填充缺失数据
fillna方法:通过一个常数调用fillna就会将缺失值替换为那个常数值。
通过一个字典调用fillna,可以实现对不同的列填充不同的值:
fillna默认会返回新对象(副本),但也可以对现有对象进行就地修改:
插值方法(对 reindx 有效的也可用于 fillna):
你可以用fillna实现许多别的功能,比如传入Series的平均值或中位数:
在一个轴上用多个(2 个以上)索引级别,即以低维度形式处理高维度数据。
MultiIndex 索引的 Series 的格式化输出形式:
选取数据子集:
在“内层”中进行选取:
层次化索引在数据重塑和基于分组的操作中很重要。比如说,上面的数据可以通过其 unstack 方法被重新安排到一个DataFrame中,它的逆运算是 stack:
对于一个DataFrame,每条轴都可以有分层索引:
各层都可以有名字(可以是字符串,也可以是别的 Python 对象)。
注意⚠️不要将索引名称跟轴标签混为一谈。
有了分部的列索引,可以轻松选取列分组。
可以多带带创建 MultiIndex 然后复用。上面的DataFrame中的分级列可以这样创建:
重排分级顺序
重新调整某条轴上各级别的顺序,或根据指定级别上的值对数据进行排序。
swaplevel:接受两个级别编号或名称,返回一个互换了级别的新对象,数据不发生改变:
sortlevel:根据单个级别中的值对数据进行排序(得到的最终结果是有序的)
根据级别汇总统计
level选项:用于指定在某条轴上求和的级别。
如下所示,分别根据行或列上的级别来对行、对列进行求和:
使用DataFrame的列
将DataFrame的一个或多个列当做行索引来用,或将行索引变成DataFrame的列:
set_index函数:将其一个或多个列转换为行索引,并创建一个新的DataFrame。
默认情况下,那些列会从DataFrame中移除,也可以将其保留下来:
reset_index:将层次化索引的级别转移到列里面(和 set_index 相反)
不足之处,欢迎指正。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/44747.html
摘要:有一些表示常见图形的对象称为块,完整的集合位于。中的绘图函数在中,有行标签列标签分组信息。密度图通过计算可能会产生观测数据的连续概率分布的估计而产生的。在探索式数据分析工作中,同时观察一组变量的散布图是很有意义的。 我们在上一篇介绍了 pandas,本篇介绍 matplotlib。 绘图和可视化 一个用于创建出版质量图表的桌面绘图包。 Matplotlib API入门 Figure ...
摘要:数据规整化清理转换合并重塑数据聚合与分组运算数据规整化清理转换合并重塑合并数据集可根据一个或多个键将不同中的行链接起来。函数根据样本分位数对数据进行面元划分。字典或,给出待分组轴上的值与分组名之间的对应关系。 本篇内容为整理《利用Python进行数据分析》,博主使用代码为 Python3,部分内容和书本有出入。 在前几篇中我们介绍了 NumPy、pandas、matplotlib 三个...
摘要:去吧,参加一个在上正在举办的实时比赛吧试试你所学到的全部知识微软雅黑深度学习终于看到这个,兴奋吧现在,你已经学到了绝大多数关于机器学习的技术,是时候试试深度学习了。微软雅黑对于深度学习,我也是个新手,就请把这些建议当作参考吧。 如果你想做一个数据科学家,或者作为一个数据科学家你想扩展自己的工具和知识库,那么,你来对地方了。这篇文章的目的,是给刚开始使用Python进行数据分析的人,指明一条全...
阅读 1924·2021-11-24 09:39
阅读 3512·2021-09-28 09:36
阅读 3281·2021-09-06 15:10
阅读 3431·2019-08-30 15:44
阅读 1151·2019-08-30 15:43
阅读 1795·2019-08-30 14:20
阅读 2710·2019-08-30 12:51
阅读 2030·2019-08-30 11:04