python - 在熊猫中应用功能
问题描述
当我运行以下
import pandas as pd
def my_func(E, I):
return E * I
d = {'E': [1, 1], 'I': [2, 2]}
df = pd.DataFrame(data=d)
df['S'] = df.apply(lambda x: my_func(x['E'], x['I']),axis=1).map(lambda x: x[0])
我收到以下错误
Traceback (most recent call last):
File "U:\GSY\scipt.py", line 14, in <module>
df['S'] = df.apply(lambda x: my_func(x['E'], x['I']),axis=1).map(lambda x: x[0])
File "C:\Users\gsy.LSH\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\pandas\core\series.py", line 3630, in map
new_values = super()._map_values(arg, na_action=na_action)
File "C:\Users\gsy.LSH\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\pandas\core\base.py", line 1145, in _map_values
new_values = map_f(values, mapper)
File "pandas\_libs\lib.pyx", line 2329, in pandas._libs.lib.map_infer
File "U:\GSY\script.py", line 14, in <lambda>
df['S'] = df.apply(lambda x: my_func(x['E'], x['I']),axis=1).map(lambda x: x[0])
TypeError: 'int' object is not subscriptable
我 100% 确定这在过去是有效的,因为我已经广泛使用它。有谁知道为什么会这样?
解决方案
只需将最后一张地图放在最后。该函数正在返回一个列表,而您的最后一个 map 函数正在尝试获取列表的第一个元素。
import pandas as pd
def my_func(E, I):
return E * I
d = {'E': [1, 1], 'I': [2, 2]}
df = pd.DataFrame(data=d)
df['S'] = df.apply(lambda x: my_func(x['E'], x['I']),axis=1)
或者,但根据此处的评论,您可以将 my_func 中的值作为列表返回:
import pandas as pd
def my_func(E, I):
return [E * I]
d = {'E': [1, 1], 'I': [2, 2]}
df = pd.DataFrame(data=d)
df['S'] = df.apply(lambda x: my_func(x['E'], x['I']),axis=1).map(lambda x: x[0])
推荐阅读
- amazon-web-services - 通过 Elastic Beanstalk 和证书管理器让 Node JS Web 应用程序使用 https?
- python - 如何将元组坐标键的字典转换为稀疏矩阵
- python - python请求发布json数据
- java - PointF 与 X 成 90 度
- python - 如何使用 python-docx 从模板流式传输文件
- angular - 如何更改sidenav(抽屉)的默认宽度
- python - 正则表达式仅匹配英文字母文本
- google-sheets - Google 表格自动使用公式更新新行
- java - Maven:不在构建路径构建指定的jar
- java - 使用 Spring PropertySource 无法通过绝对路径找到属性文件