前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python踩坑指南(第一季)

Python踩坑指南(第一季)

作者头像
sladesal
发布2019-05-17 12:04:05
5290
发布2019-05-17 12:04:05
举报
文章被收录于专栏:机器学习之旅机器学习之旅

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

代码语言:javascript
复制
with open('/path/to/file', 'r') as f:
  print(f.read())

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


代码语言:javascript
复制
embereding_data.drop_duplicates(keep='first',inplace=True)

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


代码语言:javascript
复制
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就可以完美解决了


代码语言:javascript
复制
str = " ".join(list(map(str, l)))

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


代码语言:javascript
复制
json.loads('key':value)

value不可以为set、tuple


代码语言:javascript
复制
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'."


代码语言:javascript
复制
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)


代码语言:javascript
复制
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

但是实际上却操作成功:

代码语言:javascript
复制
In [16]: arr
Out[16]: (12, [1, 3, 3, 4, 6], 'b')

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


代码语言:javascript
复制
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 某列的值根据其他列的值计算得来


代码语言:javascript
复制
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确实是比较容易入门的语言,代价是它带来的不稳定性确实也是比较高,需要积累踩坑

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.05.14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档