在python Jupiter notebook中,我曾經read_csv(data_set, sep='|', encoding='ISO-8859-1')用'|'讀取一個txt檔案 作為分隔符。但是,有幾行沒有正確拆分。
以一行為例:
DC|停止|"DC|167|169|印象|發生
我有:
| col_1 | col_2 | col_3 | col_4 | col_5 | col_6 | col_7 |
|---|---|---|---|---|---|---|
| 直流電 | 中止 | DC|167|169|印象|發生 |
我預計:
| col_1 | col_2 | col_3 | col_4 | col_5 | col_6 | col_7 |
|---|---|---|---|---|---|---|
| 直流電 | 中止 | 直流電 | 167 | 169 | 印象 | 發生了 |
我認為引號導致了這個錯誤,但我不知道如何解決這個問題。有沒有關于如何解決這個問題的建議?謝謝!
uj5u.com熱心網友回復:
我想我明白這個問題:
該程式并沒有像您預期的那樣忽略雙引號,而是在末尾附加一個(假設的)缺少的雙引號以防止語法錯誤,這會導致雙引號之后的整個輸入被視為單個字串。
一種可行的方法是在read_csv 方法的sep引數中使用 RegEx ,因此您的代碼應如下所示:
read_csv(data_set, sep='[|]', encoding='ISO-8859-1')
RegEx 中的 '[ , ]' 意味著匹配由 ' , ' 分隔的任何非空白字符(至少對于 python 是這樣),因此它忽略任何其他用作方法分隔符的字符,這適用于您的情況.
這種方法的唯一問題是雙引號與 DC 一起作為輸入包含在內,因此輸入實際上變成了:“DC
如果您想徹底解決這個問題,我能想到的最好的方法是分析在python整個資料檔案,并洗掉所有實體“。這很容易通過匯入.txt檔案作為一個字串,然后使用完成此處指定的方法從檔案中洗掉所有雙引號。
uj5u.com熱心網友回復:
一種方法是在read_csv()函式中指定不同的引號字符(檔案中不存在)。然后 Pandas 會忽略引號字符并正確處理該欄位。例如:
import pandas as pd
df = pd.read_csv('data.csv', delimiter='|', quotechar="\0")
df['col_3'] = df['col_3'].str.replace('"', '') # remove quotes
print(df)
給你:
col_1 col_2 col_3 col_4 col_5 col_6 col_7
0 DC discontinue DC 167 169 IMPRESSION Occurred
或者,quotechar您可以使用quoting=3(即csv.QUOTE_NONE)而不是更改引數
取自read_csv()檔案:
quotechar str(長度 1),可選
用于表示參考項的開始和結束的字符。參考的專案可以包含分隔符,它將被忽略。
參考int 或csv.QUOTE_*instance,默認為 0
每個 csv.QUOTE_* 常量控制欄位參考行為。使用 QUOTE_MINIMAL (0)、QUOTE_ALL (1)、QUOTE_NONNUMERIC (2) 或 QUOTE_NONE (3) 之一。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/376576.html
