python - Python Pandas:在 lambda / TypeError 中使用映射函数:(“int() 参数必须是字符串、类似字节的对象或数字,而不是“列表””
问题描述
我是 Python 和 Pandas 的新手,并且在一个 DataFrame 上苦苦挣扎了很长一段时间。花一些研究并阅读了许多论坛,但仍然无法解决它。除其他外,现在我正在尝试将一系列列表的每个元素从 Str 转换为 Int。经过一些研究,考虑通过在 apply 语句中应用 axis = 1 在 lambda 中为每一行使用map 函数。
然而,由于某种原因,map 函数变得混乱,因为它没有将单行称为列表。当应用于具有附加索引约束(如 )的单行时df['Column1'][1]
,它似乎可以正常工作,但是,如果没有[1]
. 结果,我收到如下错误消息:
#TypeError: ("int() argument must be a string, a bytes-like object or a number, not 'list'", 'occurred at index 0')
. 可能我错过了一些特殊的语法,对链接的引用,或者它根本不像我认为的那样工作。任何帮助和建议将不胜感激!提前谢谢了!
PS 由于浮点类型的缺失值(nan),还有一些额外的复杂性。由于 Series 是 List 和 Float 的混合体,因此某些命令和函数不起作用,因此需要在 lambda 中应用 if 条件。最后我分两步完成了它,因为 notnull() 在单行的 lambda 语句中不起作用......
下面是一个简单的代码,它应该说明 DataFrame 和我正在尝试做的事情。
import pandas as pd
import numpy as np
df = pd.DataFrame(pd.Series([['1'],['2','2'],['3','4','5'],np.nan]), columns = ['Column1'])
df['Empty_flag'] = df['Column1'].notnull()
#As a single component it works well.
list(map(int, df['Column1'][1]))
#When applied on the entire series, however, it returns an error message
df['Column2'] = df.apply(lambda x: list(map(int, df['Column1'])) if x['Empty_flag'] else None ,axis=1)
#TypeError: ("int() argument must be a string, a bytes-like object or a number, not 'list'", 'occurred at index 0')
解决方案
这应该有助于:
import pandas as pd
import numpy as np
df = pd.DataFrame(pd.Series([['1'],['2','2'],['3','4','5'],np.nan]), columns = ['Column1'])
df['Empty_flag'] = df['Column1'].notnull()
df['Column2'] = df.apply(lambda x: list(map(int, x['Column1'])) if x['Empty_flag'] else None ,axis=1)
>>> df
Column1 Empty_flag Column2
0 [1] True [1]
1 [2, 2] True [2, 2]
2 [3, 4, 5] True [3, 4, 5]
3 NaN False None
>>> type(df["Column2"][0][0])
<class 'int'>
推荐阅读
- python - pip 21 不再显示可用的版本号
- android - 应用程序未收到任何广告
- python - 当我使用 spotify api 搜索歌曲并打印响应时,它总是显示响应代码 [502]
- python - Python - 及时迭代并查看 DataFrame 是否包含特定日期
- docker - docker HTTP 客户端容器如何在启动时发送 HTTP 请求
- css - 在 MacOS 上强制滚动条可见性不适用于所有页面
- excel - 如何从范围内的唯一值创建图表
- extjs - 商店更新后 ExtJS 网格选择不刷新
- java - Java中如何以数组的形式访问和使用自定义类?
- google-cloud-platform - 有没有办法检查云运行服务上的 process.env 变量?