pandas妙招之 在DataFrame中通过索引高效获取数据-Python教程

资源魔 39 0

相干学习保举:python教程

明天是pandas数据解决专题的第三篇文章,咱们一同来聊聊DataFrame中的索引。

上一篇文章傍边咱们引见了DataFrame数据构造傍边一些罕用的索引的应用办法,比方iloc、loc和逻辑索引等等。明天的文章咱们来看看DataFrame的一些根本运算

数据对齐

咱们能够较量争论两个DataFrame的加以及,pandas会主动将这两个DataFrame进行数据对齐,假如对没有上的数据会被置为Nan(not a number)。

起首咱们来创立两个DataFrame:

import numpy as npimport pandas as pddf1 = pd.DataFrame(np.arange(9).reshape((3, 3)), columns=list('abc'), index=['1', '2', '3'])df2 = pd.DataFrame(np.arange(12).reshape((4, 3)), columns=list('abd'), index=['2', '3', '4', '5'])复制代码

失去的后果以及咱们想象的分歧,其实只是经过numpy数组创立DataFrame,而后指定index以及columns罢了,这应该算是很根底的用法了。

而后咱们将两个DataFrame相加,会失去:

咱们发现pandas将两个DataFrame加起来兼并了之后,但凡不正在两个DataFrame都呈现的地位就会被置为Nan。这实际上是颇有情理的,实际上不仅是加法,咱们能够较量争论两个DataFrame的加减乘除了的四则运算都是能够的。假如是较量争论两个DataFrame相除了的话,那末除了了对应没有上的数据会被置为Nan以外,除了零这个行为也会招致异样值的发作(可能纷歧定是Nan,而是inf)。

fill_value

假如咱们要对两个DataFrame进交运算,那末咱们当然没有会心愿呈现空值。这个时分就需求对空值进行填充了,咱们间接应用运算符进交运算是没方法通报参数进行填充的,这个时分咱们需求应用DataFrame傍边为咱们提供的算术办法

DataFrame傍边罕用的运算符有这么几种:

add、sub、p这些咱们都很好了解,那末这里的radd、rsub办法又是甚么意义呢,为何后面要加之一个r呢?

看起来隐晦,然而说白了一文没有值,radd是用来翻转参数的。举个例子,比方说咱们心愿失去DataFrame傍边一切元素的倒数,咱们能够写成1 / df。因为1自身并非一个DataFrame,以是咱们不克不及用1来呼叫DataFrame傍边的办法,也就不克不及通报参数,为理解决这类状况,咱们能够把1 / df写成df.rp(1),这样咱们就能够正在此中通报参数了。

因为正在算除了法的进程傍边发作了除了零,以是咱们失去了一个inf,它示意无量年夜。

咱们能够正在add、p这些办法傍边传入一个fill_value的参数,这个参数能够正在较量争论以前关于一边呈现缺失值的状况进行填充。也就是说关于关于只正在一个DataFrame中缺失的地位会被交换成咱们指定的值,假如正在两个DataFrame都缺失,那末仍然还会是Nan

咱们比照下后果就能发现了,相加上后的(1, d), (4, c)和(5, c)的地位都是Nan,由于df1以及df2两个DataFrame傍边这些地位都是空值,以是不被填充。

fill_value这个参数正在不少api傍边都有呈现,比方reindex等,用法都是同样的,咱们正在查阅api文档的时分能够留意一下。

那末关于这类填充了之后还呈现的空值咱们应该怎样办呢?莫非只能手动找到这些地位进行填充吗?当然是没有事实的,pandas傍边还为咱们提供了专门处理空值的api。

空值api

正在填充空值以前,咱们起首要做的是发现空值。针对这个成绩,咱们有isna这个api,它会前往一个bool型的DataFrame,DataFrame傍边的每个地位示意了原DataFrame对应的地位能否是空值。

dropna

当然只是发现能否是空值一定是不敷的,咱们有时分会心愿没有要空值的呈现,这个时分咱们能够抉择drop掉空值。针对这类状况,咱们能够应用DataFrame傍边的dropna办法。

咱们发现应用了dropna之后,呈现了空值的行都被丢弃了。只保存了不空值的行,有时分咱们心愿丢弃是的列而没有是行,这个时分咱们能够经过传入axis参数进行管制。

这样咱们失去的就是没有含空值的列,除了了能够管制行列以外,咱们还能够管制执行drop的严格水平。咱们能够经过how这个参数来判别,how支持两种值传入,一种是'all',一种是'any'。all示意只有正在某一行或许是某一列全为空值的时分才会丢弃,any与之对应就是只需呈现了空值就会丢弃。默许没有填的话以为是any,普通状况下咱们也用没有到这个参数,大略有个印象就能够了。

fillna

pandas除了了能够drop含有空值的数据以外,当然也能够用来填充空值,现实上这也是最罕用的办法。

咱们能够很简略地传入一个详细的值用来填充:

fillna会前往一个新的DataFrame,此中一切的Nan值会被交换成咱们指定的值。假如咱们没有心愿它前往一个新的DataFrame,而是间接正在原数据进行修正的话,咱们能够应用inplace参数,标明这是一个inplace的操作,那末pandas将会正在原DataFrame上进行修正。

df3.fillna(3, inplace=True)复制代码

除了了填充详细的值之外,咱们也能够以及一些较量争论连系起来算进去应该填充的值。比方说咱们能够较量争论出某一列的均值、最年夜值、最小值等各类较量争论来填充。fillna这个函数不只能够应用正在DataFrame上,也能够应用正在Series上,以是咱们能够针对DataFrame中的某一列或许是某些列进行填充:

除了了能够较量争论出均值、最年夜最小值等各类值来进行填充以外,还能够指定应用缺失值的前一行或许是后一行的值来填充。完成这个性能需求用到method这个参数,它有两个接纳值,ffill示意用前一行的值来进行填充,bfill示意应用后一行的值填充。

咱们能够看到,当咱们应用ffill填充的时分,关于第一行的数据来讲因为它不前一行了,以是它的Nan会被保存。一样当咱们应用bfill的时分,最初一行也无奈填充。

总结

明天的文章傍边咱们次要引见了DataFrame的一些根本运算,比方最根底的四则运算。正在进行四则运算的时分因为DataFrame之间可能存外行列索引不克不及对齐的状况,这样较量争论失去的后果会呈现空值,以是咱们需求对空值进行解决。咱们能够正在进行较量争论的时分经过传入fill_value进行填充,也能够正在较量争论之后对后果进行fillna填充。

正在实际的运用傍边,咱们普通很少会间接对两个DataFrame进行加减运算,然而DataFrame中呈现空置是粗茶淡饭的事件。因而关于空值的填充以及解决十分首要,能够说是学习中的重点,各人万万留意。

想理解更多编程学习,敬请存眷php培训栏目!

以上就是pandas妙招之 正在DataFrame中经过索引高效猎取数据的具体内容,更多请存眷资源魔其它相干文章!

标签: Python python教程 python编程 python使用问题 pandas DataFrame

抱歉,评论功能暂时关闭!