簡體   English   中英

Python Pandas 數據清洗

[英]Python Pandas Data Cleaning

我正在嘗試讀取一個大型日志文件,該文件已使用不同的分隔符(遺留問題)進行了解析。

代碼

for root, dirs, files in os.walk('.', topdown=True):
    for file in files:
        df = pd.read_csv(file, sep='\n', header=None, skipinitialspace=True)
        df = df[0].str.split('[,|;: \t]+', 1, expand=True).rename(columns={0: 'email', 1: 'data'})
        df.email = df.email.str.lower()
        print(df)

輸入文件

user1@email.com         address1
User2@email.com    address2
 user3@email.com,address3
  user4@email.com;;addre'ss4
UseR5@email.com,,address"5
user6@email.com,,address;6
single.col1;
 single.col2                 [spaces at the beginning of the row]
    single.col3              [tabs at the beginning of the row]
nonascii.row;data.is.junk-Œœ
not.email;address11
not_email;address22

問題

  • 需要從 DF 中刪除包含任何非 ascii 字符的行(我的意思是需要排除和清除整行)
  • 需要修剪開頭帶有制表符或空格的行。 我有'skipinitialspace = True',但似乎這不會刪除標簽
  • 需要檢查“df.email”以查看這是否是有效的 email 正則表達式格式。 如果不是,則需要清除整行

將不勝感激任何幫助

df = pd.read_csv(file, sep='\n', header=None)    

#remove leading/trailing whitespace and split into columns
df = df[0].str.strip().str.split('[,|;: \t]+', 1, expand=True).rename(columns={0: 'email', 1: 'data'})

#drop rows with non-ASCII (<32 or >255, you can adopt the second to your needs)
df = df[~df.data.fillna('').str.contains('[^ -ÿ]')]

#drop rows with invalid email addresses
email_re = "^\w+(?:[-+.']\w+)*@\w+(?:[-.]\w+)*\.\w+(?:[-.]\w+)*$"
df = df[df.email.fillna('').str.contains(email_re)]

email 正則表達式取自此處(只是將括號更改為非分組)。 如果你想全面,你也可以使用這個怪物正則表達式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM