python - Pandas 将函数应用于列列表会引发 TypeError

标签 python pandas dataframe

我正在尝试清理 pandas 中的多个列。我有以下功能来清理它:

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)

类型错误:(“无法将系列转换为”,“首先发生在索引 RPKs 处”)

以下是一些示例数据,当前对象类型为“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

最佳答案

applymaplambda

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

关于python - Pandas 将函数应用于列列表会引发 TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50531873/

相关文章:

python - 为什么 pandas bool 过滤会产生 float ?

python - 选择具有特定值的特定列 pandas

pandas - 从元组列表创建 Pandas 数据框

python - 名称错误 : global name 'company_id' is not defined - Odoo v10 community

python - numpy掩码创建广播

python - Pandas:每个单元格都是一个列表,如何在单元格之间执行逐元素减法?

python - 在数据帧python中找到并加上不足的日期时间

python - 使用 Django、celery 和 Redis 安排任务

python - 我是否应该始终在 `except` 语句中指定异常类型?

Python - 从 Pandas 列中旋转并创建直方图,其中包含缺失值