zoukankan      html  css  js  c++  java
  • 数据清洗——python定位csv中的特定字符位置

          之前发过一篇关于定位csv中的特殊字符的,主要是用到了python的自带的函数,近期又遇到了一些新的问题,比如isdigit()的缺点在于不能判断浮点型,以及小数中有多个小数点的情况。发现还是正则表达式更灵活一些。

    import pandas as pd
    import numpy as np
    import csv
    import re
    
    def is_chinese(uchar):
        if u'u4e00' <= uchar <= u'u9fff':
            return True
        else:
            return False
            
    csv_reader = csv.reader(open('D:/测试-清洗后数据-utf8.csv',
                                 encoding = 'utf-8'))
                                
    rows = 0
    for row in csv_reader:
        columns = 0
        rows += 1
        for Factor in row[0:]:
            columns += 1
            if not Factor.isalnum() and Factor != '' and not is_chinese(Factor) and re.match("[0-9]+.[0-9]+$",Factor) == None:
    #            columns += 1
                print(rows,columns,Factor)

    更多的字符判断代码可以参考下面:

    #!/usr/bin/env python
    # -*- coding:utf-8-*-
    
    # 判断一个unicode是否是汉字
    def is_chinese(uchar):         
        if 'u4e00' <= uchar<='u9fff':
            return True
        else:
            return False
    
    # 判断一个unicode是否是数字
    def is_number(uchar):
        if 'u0030' <= and uchar<='u0039':
            return True
        else:
            return False
    
    # 判断一个unicode是否是英文字母
    def is_alphabet(uchar):         
        if ('u0041' <= uchar<='u005a') or ('u0061' <= uchar<='u007a'):
            return True
        else:
            return False
    
    # 判断是否非汉字,数字和英文字符
    def is_other(uchar):
        if not (is_chinese(uchar) or is_number(uchar) or is_alphabet(uchar)):
            return True
        else:
            return False
    
    if __name__=="__main__":
        ustring=u'中国 人名a高频A'
        # 判断是否有其他字符;
        for item in ustring:
            if (is_other(item)):
                break

    关于正则表达式的解释:

    ^[-+]?[0-9]+.[0-9]+$  

    ^表示以这个字符开头,也就是以[-+]开头,[-+]表示字符-或者+之一,

    ?表示0个或1个,也就是说符号是可选的。

    同理[0-9]表示0到9的一个数字,+表示1个或多个,也就是整数部分。

    .表示的是小数点,是转义字符因为.是特殊符号(匹配任意单个除 之外的字符),

    所以需要转义。

    小数部分同理,$表示字符串以此结尾。

    最后,推荐一个好用的写正则的网站,用它检查正则表达式比较方便,https://regexper.com/#%5E(%5B%EF%BC%88(%5D%7C)%5B%200-9%E4%B8%80%E4%BA%8C%E4%B8%89%E5%9B%9B%E4%BA%94%E5%85%AD%E4%B8%83%E5%85%AB%E4%B9%9D%E5%8D%81%5D%2B%5B.%EF%BC%8E%E3%80%82%EF%BC%8C%E3%80%81%EF%BC%9A)%EF%BC%89%5D%2B%5B.0-9A-Z%5D%24

  • 相关阅读:
    阿里P8架构师谈:阿里双11秒杀系统如何设计?
    秒杀系统设计的知识点
    秒杀系统架构优化思路
    秒杀系统解决方案
    Entity Framework Code First (七)空间数据类型 Spatial Data Types
    Entity Framework Code First (六)存储过程
    Entity Framework Code First (五)Fluent API
    Entity Framework Code First (四)Fluent API
    Entity Framework Code First (三)Data Annotations
    Entity Framework Code First (二)Custom Conventions
  • 原文地址:https://www.cnblogs.com/matrixworld/p/6772572.html
Copyright © 2011-2022 走看看