r527665047 2020-07-06 14:52 采纳率: 0%
浏览 151

初学者:刚开始学Python,写了一个程序,代码太长了,写了一个自定义函数精简代码,报错了,搞不懂问题出在哪里?

项目需求:
对目标文件夹中的所有数据进行清洗,合成一个表格,剔除掉指定条件的数据以后,重新生成文件导出。

当前情况:项目写完以后,剔除指定条件的数据代码基本是一样的,准备写一个自定义函数用于统一调用,精简代码。

精简前的代码:


def clearcurrency(x):

        清洗货币

    if isinstance(x, str):
        return(x.replace('$', '').replace(',', ''))
    return(x)


def clearpercent(x):

    清洗百分号

    if isinstance(x, str):
        return (x.replace("%", ""))
    return(x)


def clearnum(x):

    清洗字符串中的“,”

    if isinstance(x, str):
        return (x.replace(",", ""))
    return (x)

删除购买人数在200人以下的数据

result['购买人数'] = result['购买人数'].apply(clearnum).astype('float')
result = result.loc[result['搜索人数'].astype(float) > 200]

删除支付转化率3%以下的数据

result['支付转化率"] = result["支付转化率'].apply(clearpercent).astype("float")
result = result.loc[result["支付转化率"].astype(float)/100 > 0.03]

其他的相似代码我就不贴了,主要是根据条件,删掉不符合要求的数据。

我想把上面的代码做一个精简,把数据按照上面的函数,合并成三类功能模块(主要是我不知道合成一个功能模块该怎么写)

合并后的代码

def clear1(x):
    """
    清洗字符串中的“,”
    """
    if isinstance(x, str):
        return (x.replace(",", ""))
    return (x)

def clear2(x,lable_name,pass_number):
    """
    清洗小于指定数X的行
    """
    x[lable_name] = x[lable_name].apply(clear1).astype("float")
    result = x.loc[x[lable_name].astype(float) > pass_number]
    return (result)

result = result.clear2(result,"搜索人数", 5)

最终实现的功能是:调用自定义模块,把清洗好的数据按照条件,进行再度精简删除。

1、请问我的代码该怎么修改,以完成功能需求。
2、如果我的代码全错,如果想要实现我上面提到的功能需求,把上面3种不同的功能合并成一个自定义函数,是否可以合并?该怎么写才能实行需求?

  • 写回答

1条回答 默认 最新

  • Lonelypatients° 2020-07-06 15:38
    关注

    建议你去看一下python的工厂模式, 能解决你想的多功能模块, 又要有封装的思想, 调用一个主程序即可完成所有操作,
    推荐:python工厂模式简单案列

    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大