數據清洗——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個或多個,也就是整數部分。

\.表示的是小數點,\是轉義字符因為.是特殊符號(匹配任意單個除\r\n之外的字符),

所以需要轉義。

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

 

最后,推薦一個好用的寫正則的網站,用它檢查正則表達式比較方便,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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM