美文网首页机器学习之旅
Python踩坑指南(第一季)

Python踩坑指南(第一季)

作者: slade_sal | 来源:发表于2019-05-14 09:29 被阅读3次

    最近在python开发的过程中,发现了一些比较有意思的问题,确实让自己在开发过程中被恶心了一把,所以开了这个连续的更新博文,之后会持续的按第一第二第三这种版本下去,更新一些比较有意思的python代码问题。

    with open('/path/to/file', 'r') as f:
      print(f.read())
    

    IO读取采用with形式,避免忘记close,否则会产生很神奇的结果


    embereding_data.drop_duplicates(keep='first',inplace=True)
    

    python 中删除重复项 如果在原来数据上删除重复项,就要加入inplace=True
    否则 只是保存一个副本!!!


    pd.read_csv(filename,error_bad_lines=False)
    

    pandas.errors.ParserError: Error tokenizing data. C error: Expected 1 fields in line 3, saw 2解决办法
    在使用pandas读取csv文件时报以上错误,解决办法如左
    加上error_bad_lines=False就可以完美解决了


    str = " ".join(list(map(str, l)))
    

    myList = ['a','b','c','d'] myString = ",".join(myList ) 当myList含有数字的时候这种方法就会报错 因此需要转为str


    json.loads('key':value)
    

    value不可以为set、tuple


    d3='{"Message":"已注销帐户。\r\n\r\n使用者:\r\n\t安全"}'
    j=json.loads(d3,strict=False,encoding='utf-8')
    print(type(j)) #返回值:<type 'dict'>
    print(j['Opcode'].encode('u8')) #返回值:信息
    

    使用json.loads时,如果原字符串中包含有 \r\n\t等字符,则会提示报错,
    修改参数strict=False即可

    说明:"If strict is False (True is the default), then control characters will be allowed inside strings. Control characters in this context are those with character codes in the 0-31 range, including '\t' (tab), '\n', '\r' and '\0'."


    data['county_route_index'] = data.apply(lambda x: str(x.start_county_cd) + '_' + str(x.end_county_cd),
    axis=1)
    

    生成county_route_index字段示例310112.0_320583.0,而start_county_cd、end_county_cd为整型(int64)
    解决办法:
    1.str(x.start_county_cd)改为str(int(x.start_county_cd))
    2.df['col3'] = df['col1'].map(str) + '_' + df['col2'].map(str)


    arr = (12,[1,3,3,4],'b')
    arr[1]+=[6]
    
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-15-6bc7f041d391> in <module>()
    ----> 1 arr[1]+=[6]
    TypeError: 'tuple' object does not support item assignment
    

    但是实际上却操作成功:

    In [16]: arr
    Out[16]: (12, [1, 3, 3, 4, 6], 'b')
    

    不要混合使用list和tuple的时候使用concat操作


    def func(a,b):
    if a ==1:
      return b
    else:
      return 1-b
    
    bbs_data["real_label"] = bbs_data.apply(lambda row:func(row[2],row[3]),axis = 1)
    

    dataframe 某列的值根据其他列的值计算得来


    pRec = {}
    import functools
    
    def check_is_key_param(f):
        global pRec
        @functools.wraps(f)
        def wrapper(*args, **kwargs):
            pRec.update(f(*args, **kwargs))
            return f(*args, **kwargs)
        return wrapper
    

    收集计算过程中的中间数据

    我觉得pythons确实是比较容易入门的语言,代价是它带来的不稳定性确实也是比较高,需要积累踩坑

    欢迎大家关注我的个人bolg知乎,更多代码内容欢迎follow我的个人Github,如果有任何算法、代码、转行疑问都欢迎通过公众号发消息给我。

    相关文章

      网友评论

        本文标题:Python踩坑指南(第一季)

        本文链接:https://www.haomeiwen.com/subject/szejaqtx.html