Python 熊猫系列应用方法

Python 熊猫系列应用方法,python,pandas,apply,Python,Pandas,Apply,我一直在对series和dataframe使用pandas apply方法,但显然我仍然缺少一些东西,因为我在尝试执行一个简单的函数 这就是我所做的: def minmax(row): return (row - row.min())/(row.max() - row.min()) row.apply(minmax) 但是,这将返回一个全零序列。例如,如果 row = pd.Series([0, 1, 2]) 然后 根据需要返回[0.0,0.5,1.0]。但是,row.apply(

我一直在对series和dataframe使用pandas apply方法,但显然我仍然缺少一些东西,因为我在尝试执行一个简单的函数

这就是我所做的:

def minmax(row):
    return (row - row.min())/(row.max() - row.min())

row.apply(minmax)
但是,这将返回一个全零序列。例如,如果

row = pd.Series([0, 1, 2])
然后

根据需要返回[0.0,0.5,1.0]。但是,row.apply(minmax)返回[0,0,0]

我相信这是因为级数是整数,整数除法返回0。但是,我不明白

  • 为什么它与minmax(row)一起工作(它的行为不应该相同吗?)
  • 如何在apply函数中正确地转换它以返回适当的浮点值(我尝试使用.astype转换它,这给了我所有的NaN…我也不理解)
  • 如果将其应用于数据帧,如df.apply(minmax),它也可以根据需要工作。(新增编辑)

我怀疑我在应用程序的工作原理中遗漏了一些基本的东西。。。或者是稠密的。不管怎样,先谢谢你

当您调用
行时。对
系列
应用(最小值)
仅将值传递给函数。这称为元素方面的

对系列的值调用函数。可以是ufunc(一个应用于整个系列的NumPy函数)或只对单个值起作用的Python函数


数据帧上调用
row.apply(minmax)
时,会将行(默认)或列传递给函数(根据
轴的值)

传递给函数的对象是具有数据帧索引(axis=0)或列索引(axis=1)的系列对象。返回类型取决于传递的函数是否聚合,如果数据帧为空,则取决于reduce参数。这称为行方向列方向


这就是为什么您的示例在
数据帧
上按预期工作,而不是在
系列
上工作的原因。有关将函数映射到
系列

的信息,请选中此项,了解您使用的熊猫是什么版本的?我不能复制这个。啊。。。嗯,这给了我一些鼓励。另外,我刚刚补充说,将其应用于数据帧的效果很好。熊猫0.18.0…啊!我忽略了可以应用于整个系列的唯一函数是numpy函数。所以,在这个特殊的情况下,apply和map的工作原理是一样的,我相信。您能解释一下为什么python不会因为将.min()和.max()应用于这些值而感到不安吗?在这种情况下,这是没有意义的,我本以为会出错。我这样做了,row.apply(lambda x:x-x.min()),以测试您所说的内容,它还返回[0,0,0],所以我收集x.min()==x,但我认为它会出错。谢谢这很奇怪,在我的测试中,对
系列
调用函数会产生一个错误
AttributeError:“int”对象没有属性“min”
。这似乎是预期的行为。你在用什么熊猫?我在Juypter(我工作的地方)和PyCharm中都重新创建了它,但没有错误。提出错误会节省我很多时间。:)我将更新到0.18.1并查看。再次感谢。
minmax(row)