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

  • 相关阅读:
    Spring----Day03
    Spring----Day02
    python
    python
    python
    python
    python
    python
    python
    python
  • 原文地址:https://www.cnblogs.com/matrixworld/p/6772572.html
Copyright © 2011-2022 走看看