python - pandas apply typeError: 'float' object is not subscriptable, 在 pandas 的特定列上应用自定义函数
问题描述
我正在使用 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')
解决方案
当您使用 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)
推荐阅读
- c# - Asp.NET MVC 中的更新
- javascript - 在 Wordpress 页面中嵌入 Javascript 和 PHO
- django - 找不到 Django、URL 和视图
- c# - xml linq。对象有问题。当前上下文中不存在该名称
- java - Google NLP api 给出 找不到 TLS ALPN 提供者;没有可用的 netty-tcnative、Conscrypt 或 Jetty NPN/ALPN
- python - 使用特殊字符绘图:“▬”
- node.js - Formdata 请求 ShortPixel API
- python - Tensorflow梯度返回null
- c# - 使用 Mediacomposition 复用音频和视频 UWP
- java - 如何解析使用 Gson 扩展基类的指定类?