python中一些莫名其妙的异常

发布于:2024-05-08 ⋅ 阅读:(25) ⋅ 点赞:(0)

一、字符串中空格\xa0

对于文本中的一些空格,原始状态时显示为普通“空格”(其实是latin1编码字符),但是经过split()操作后,这些latin1编码的空格就显式表达了,即表示为 \xa0 。

s1 = '''“对我院 2019 年 1 月 1 日至 2020 年 12 月 30 日所行气管、隆突手术共 129 例患者进行回顾性分析,主要手术方式为气管肿瘤切除伴隆突重建术,另有 5 例在体外循环(ECMO)下完成手术、4 例伴喉切除术、1 例组织工程气管替代物移植等复杂手术。”
“对我院 2019 年 1 月 1 日至 2020 年 12 月 30 日所行气管、隆突手术共 129 例患者进行回顾性分析,主要手术方式为气管肿瘤切除伴隆突重建术,另有 5 例在体外循环(ECMO)下完成手术、4 例伴喉切除术、1 例组织工程气管替代物移植等复杂手术。”'''
print(s1)
print(s1.split('\n'))

结果:在这里插入图片描述

二、文件写入为空问题

使用write()方法,写入list等对象,不会报错也不会有提示,但是写入结果为空。
如下,写入文件中,结果为空。将lis转为字符串(str(lis))就没问题了。
txt中不能写入Python对象。

lis = [('a', 1), ('b', 2)]
with open('temp.txt', 'w') as f_tp:
    tp.write(lis)

【注意】有时候可以尝试使用writelines()方法写入字符串。

三、Counter对NAN空值的统计问题

  • Counter在统计list中的NAN值时,结果是正确的;
  • 但是如果统计DataFrame中某一列的取值情况时,其中的NAN值则出现异常(Counter会将不同的NAN认为是不相等的),即使将该列转为list后再统计依然不行。
  • 示例如下:
>>> import numpy as np
>>> from pandas import DataFrame
# 此时Counter结果是正常的
>>> lis = [1, np.nan, 3, 'a', np.nan]
>>> Counter(lis) 
Counter({nan: 2, 1: 1, 3: 1, 'a': 1})
# 此时结果不对,Counter认为不同的nan不相等
>>> df = DataFrame({'A': [2, 2, np.nan, np.nan], 'B': [4, np.nan, 6, 0], 'C': [7, 8, 9, 0]})  
>>> Counter(df['A'])  
Counter({2.0: 2, nan: 1, nan: 1})
# 将df的目标列转为list再进行统计,也不行
>>> Counter(df['A'].tolist()) 
Counter({2.0: 2, nan: 1, nan: 1}
# 上面第二、三种情况可以填充空值后进行统计
>>> df1 = df.fillna('nan') 
>>> Counter(df1['A']) 
Counter({2.0: 2, 'nan': 2})

网站公告

今日签到

点亮在社区的每一天
去签到