【问题标题】:Applying a custom function to pandas Series produces AttributeError将自定义函数应用于熊猫系列会产生 AttributeError
【发布时间】:2020-02-29 14:15:54
【问题描述】:

我想为熊猫系列创建一个自定义汇总函数。

df["tmk"].min()
df["tmk"].max()

这行得通。

def min_max(x):
    minimum = x.min()
    maximum = x.max()
    print(f'Min: {minimum} | Max: {maximum}')

df["tmk"].apply(lambda x: min_max(x))

AttributeError: 'float' object has no attribute 'min'

我想我在这里做错了。谁能帮助我如何正确应用该功能?

【问题讨论】:

  • 试试min_max(df["tmk"])

标签: python pandas apply attributeerror


【解决方案1】:

如果使用Series.apply,它将按列的每个值循环。错误表示标量没有minmax

df = pd.DataFrame({
         'tmk':[4,5,4,5,5,np.nan],
})


def min_max(x):
    minimum = x.min()
    maximum = x.max()
    print(f'Min: {minimum} | Max: {maximum}')

您需要通过Series.pipe处理列的所有值:

df["tmk"].pipe(min_max)

或者传递 Series 以像 cmets 中提到的 @AkshayNevrekar 那样发挥作用:

min_max(df["tmk"])

另一个想法是使用DataFrame.apply - 为一列添加[] DataFrame

df[["tmk"]].apply(min_max)

Min: 4.0 | Max: 5.0

另一种方法是使用Series.describeSeries.agg

print (df['tmk'].describe())

count    5.000000
mean     4.600000
std      0.547723
min      4.000000
25%      4.000000
50%      5.000000
75%      5.000000
max      5.000000
Name: tmk, dtype: float64

print (df['tmk'].agg(['min', 'max']))
min    4.0
max    5.0
Name: tmk, dtype: float64

也可以添加format 就像提到的@Jon Clements,谢谢:

print ('Min: {min} | Max: {max}'.format_map(df['tmk'].agg(['min', 'max'])))

Min: 4.0 | Max: 5.0

【讨论】:

  • 虽然给出了用例 - 类似:'Min: {min} | Max: {max}'.format_map(df['tmk'].agg(['min', 'max'])) 在这里会很好......
  • 谢谢,这是我最喜欢的解决方案,因为它允许我这样做:columns = ["tmk", "tgk", "tnk", "txk"] for column in columns: wetterdaten_level1[column].pipe(min_max)
【解决方案2】:

如果你只想获取最小值和最大值,使用describe()方法可能更容易

import pandas as pd
import numpy as np

# fix seeds so we get the same numbers
np.random.seed(42)
a = np.random.normal(0, 1, 10)
np.random.seed(42)
b = np.random.uniform(0, 1, 10)

df = pd.DataFrame({"A": a, "B": b})
df.describe()

>>>            A          B
count  10.000000  10.000000
mean    0.448061   0.520137
std     0.723008   0.315866
min    -0.469474   0.058084
25%    -0.210169   0.210649
50%     0.519637   0.599887
75%     0.737498   0.726014
max     1.579213   0.950714

您可以从那里获取最小值、最大值和其他指标

【讨论】:

    【解决方案3】:

    对于此类分析,只需使用describe 系列方法。

    如果你想在这里解释你的错误,那就是。这样做:

    df["tmk"].apply(lambda x: min_max(x))
    

    您正在将您的功能应用于您系列中的每个值。该值的类型为“float”。 python中的浮点数没有方法max或min。相反,您可以使用:

    df["tml"].min()
    

    或者可能是内置的python min/max,例如:

    min(df["tml"])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-13
      • 2020-05-12
      • 2018-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      • 1970-01-01
      相关资源
      最近更新 更多