pandas apply typeError: 'float' object is not subscriptable, 在 pandas

时间:2020-12-18 19:32:50

标签: python dataframe lambda typeerror apply

我正在使用 lambda 函数基于自定义函数创建新的数据框列,但无法正常工作。我已经在下面发布了代码和错误,看起来问题不在于 lambda 函数,而是原始自定义函数 (get_bins)。

df['X'] 中的值是浮点值,但 get_bin 函数在 lambda 函数之外应用时会起作用。不知道我哪里出错了。

def get_bins(df):
    interval_range = pd.interval_range(start = min(df), end = max(df) + 5, freq=5, closed = 'left')
    bins = pd.cut(df,interval_range)
    return (bins)


df_ex['bins'] = df_ex.apply(lambda i: get_bins(i['X']), axis = 1)

 
---> 10 df['bins'] = df.apply(lambda i: get_bins(i['X']), axis = 1)

<ipython-input-7-7bbf11fd23d3> in get_bins(d)
      2 
      3 def get_bins(d):
----> 4     interval_range = pd.intervalpandas apply typeError: 'float' object is not subscriptable_range(start = min(d), end = max(d) + 5, freq=5, closed = 'left')
      5     bins = pd.cut(d,interval_range)
      6     return (bins)

TypeError: ("'float' object is not iterable", 'occurred at index 0')

1 个答案:

答案 0 :(得分:0)

当您使用 df.apply(...,axis=1) 时,您将自定义函数应用于整行。该行然后被转换为一个序列(如果你愿意的话,你的初始行的转置矩阵)。

当您使用“lambda i: get_bins(i['X'])”时,您将唯一的 row['X'] 值传递给您的 get_bins 函数。 row['X'] 是一个浮点数,python 无法计算最小值或最大值。

注意:如果你想更好地理解,你可以这样做:

def my_print(x):
  print(x)
  print('-'*50)
df.apply(my_print, axis=1)