python - Pandas 将函数应用于列列表会引发 TypeError
问题描述
我正在尝试清理熊猫中的多个列。我有以下功能来清理它:
def convert_dash_comma_into_float(num):
if " - " in num:
num = num.replace(" - ", "0.0")
elif "," in num:
num = num.replace(',', '')
try:
return float(num)
except ValueError:
return np.nan
当我将此功能应用于单个列时,它可以工作。
df["rpks"].apply(convert_dash_comma_into_float)
但是当我尝试通过提供一个列表来申请一系列列时,因为我有一堆要清理的列,它会引发 TypeError
df[["rpks", 'asks', 'pax']].apply(convert_dash_comma_into_float)
TypeError: ("cannot convert the series to ", '发生在索引 RPKs First')
以下是当前对象类型为“O”的一些示例数据:
rpks asks pax
9.74 194.72 1,752.48
19.47 82.74 700.85
- 360.16 3,679.45
127.03 994.14 7,306.93
53.54 612.75 5,770.53
- 7.02 666.43
34.52 197.28 784.19
- 460.31 5,466.80
- 108.63 1,128.90
- 16.54 913.49
10.52 368.06 3,054.90
93.93 784.55 5,646.55
解决方案
applymap
和lambda
df[['rpks', 'asks', 'pax']].applymap(lambda r: '0.0' if '-' in str(r) else str(r).replace(',', ''))
rpks asks pax
0 9.74 194.72 1752.48
1 19.47 82.74 700.85
2 0.0 360.16 3679.45
3 127.03 994.14 7306.93
4 53.54 612.75 5770.53
5 0.0 7.02 666.43
6 34.52 197.28 784.19
7 0.0 460.31 5466.80
8 0.0 108.63 1128.90
9 0.0 16.54 913.49
10 10.52 368.06 3054.90
11 93.93 784.55 5646.55
推荐阅读
- npm - 使用 npm 安装 gulp 时不推荐使用的软件包
- java - 如何为 lombok Builder 生成吸气剂?
- python - 在 Jupyter Notebook 中打开文件
- javascript - 我在下面有这段代码,它应该在特定频道中的 10 条消息后发送不和谐嵌入,但由于某种原因它没有并且不记录任何错误
- c++ - 网格类中损坏的顶点数据
- javascript - 根据 ID 映射答案
- terminal - 如何使用 pycharm 终端运行具有 Windows 环境变量的机器人测试套件?
- c# - 具有依赖关系的 Automapper 自定义 ValueResolver
- angular - 在 Angular/rxjs 中使用异步管道时如何传递参数?
- node.js - 将数据插入嵌套数组(评论操作)MongoDB