fixmint
ZH-TW

CSV 匯出檔亂七八糟?依序檢查這些問題

作者: · · 閱讀約 5 分鐘

要清理亂七八糟的 CSV 匯出檔,請分層處理:先處理字元,再處理版面,最後確認每一欄代表什麼意思。CSV 是純文字檔,所以大多數問題來自錯誤的字元、多出的列或分隔符號,或是程式讀取數值的方式和你不同。先修正字元。一個隱藏的空格可能讓日期無法被辨識為日期,之後的修正就會莫名其妙地失敗。

CSV 清理工具CSV 有空白和重複資料免費使用

看起來正確,實際上不是的字元

多餘的空格。 儲存格開頭或結尾的空格,或值中間的兩個空格,會讓查找、篩選或串接把「Berlin 」和「Berlin」視為兩個不同的值。

隱形字元。 有些字元在螢幕上不佔位置:

  • 不換行空格(U+00A0)看起來和一般空格一樣,但它是不同的字元。網頁用它來讓詞語保持在同一行。
  • 零寬空格(U+200B)完全沒有寬度。
  • 位元組順序標記(U+FEFF)可能出現在檔案最開頭,位於第一個標題之前。欄位看起來是「id」,實際上卻是「id」,所以查找「id」會失敗。

移除隱藏字元會在做任何變更前,先顯示它找到的字元。

亂碼。 應該是「é」的地方出現「é」,這是稱為亂碼的編碼問題。檔案以 UTF-8 儲存,其中 é 佔兩個位元組,卻被當成 Windows-1252 讀取,於是那兩個位元組變成兩個毫不相干的字母。「’」撇號也會以同樣方式變成「’」。解法是以 UTF-8 讀取檔案,或從來源重新匯出並選擇 UTF-8。修復已經以錯誤方式儲存的文字很不可靠,所以請保留原始檔,並在副本上作業。

版面:標題列、空白行和重複列

報表常在真正的標題列上方有標題、日期和一行空白。請刪除標題列以上的所有內容,讓第一行只包含欄位名稱。每一欄都需要一個名稱,且名稱不可為空。

每一列的欄位數都應該相同。未加引號的值中若有多餘的逗號,會多出一個欄位,之後的每個值都會向右移一欄。請逐列計算欄位數,欄位數不同的列就是有問題的列。

重複分為兩種。每一欄都相同的列,通常是匯出或貼上時重複產生的,可以安全刪除。有相同鍵值、但其他欄位不同的列,可能是更新後的版本。若刪錯了,可能會刪掉最新的版本,所以請先檢查。

日期:03/04/2026 可能是兩個不同的日子

03/04/2026 在某些國家是 4 月 3 日,在另一些國家則是 3 月 4 日,而文字本身無法判斷是哪一種。請查看同一欄的其他日期。如果有任何一個值的第一個數字大於 12,表示該欄是日在前;如果有任何一個值的第二個數字大於 12,則表示是月在前。如果每個值的兩個數字都不大於 12,檔案就無法告訴你答案,請向資料來源確認。資料型別檢查器會把這類欄位標示為不明確,而不是猜測。

確定順序後,請把每個日期轉換為 ISO 8601,也就是「年-月-日」格式,例如 2026-04-03。這種格式不會產生歧義,而且作為文字也能正確排序。混合格式請逐一轉換,因為大多數程式對同時含有兩種樣式的欄位,讀取結果都會不一致。

儲存為文字的數字

當數字帶有貨幣符號、百分比符號,或中間含有空格時,就會被儲存為文字,例如「€ 12」、「45%」,或中間含有不換行空格的「1 234」。千位分隔符號,例如「1,234.50」,也常使程式把數值當成文字讀取。試算表會把文字數字靠左對齊,而加總時會略過它們。

小數點逗號是常見的陷阱。在「1.234,50」中,逗號是小數點,句點則用來分組千位;在「1,234.50」中則剛好相反。因此「1,234」在某個匯出檔中可能是 1234,在另一個匯出檔中卻可能是 1.234。轉換前請先確認來源的地區格式,然後移除千位分隔符號,並把小數點逗號換成小數點。

前導零遺失

郵遞區號、商品代碼和帳號常以零開頭。CSV 在試算表中開啟時,「01234」會被讀成數字 1234,零就消失了。儲存檔案後,遺失的零也不會回來,因此來源系統是唯一可靠的副本。

識別碼即使看起來像數字,仍然是文字,因為你不會對它做算術。清理 CSV時,請對這類欄位關閉數字轉換,並從來源重新開啟檔案,而不要使用試算表存過的副本。之後請檢查每一欄的資料型別,確保郵遞區號欄不會悄悄變回數字。Excel 在開啟 CSV 時也可能改寫數值,所以請在純文字檢視中確認結果。

檢查型別,然後分析

清理完成後,請檢查每一欄的型別。價格欄中只要有一個「N/A」,整欄就會變成文字,其總和也會算錯。資料型別檢查器會為每一欄指定型別和信心分數,並列出不符合的儲存格。

接著分析各欄。CSV 欄位分析器會顯示每一欄的空缺值和離群值。離群值可能是真實的數值,也可能是錯誤,例如某個價格比其他價格大一千倍,這通常來自小數點或分隔符號放錯位置。

特殊情況

  • 引號內的換行。 引號中的值可能包含換行。如果工具以行為單位切分檔案,就會把該列拆成兩半,因此請使用能理解引號欄位的讀取工具。
  • 分號分隔的檔案。 許多歐洲的試算表以分號儲存 CSV,因為在他們的地區格式中,逗號是小數點。讀取欄位前,請先確認分隔符號。
  • 保留原始檔。 將清理後的結果寫入新檔案,並保留原本的匯出檔。

順序檢查清單

  1. 保留一份原始匯出檔的副本。
  2. 移除多餘的空格和隱形字元。如果可以,請在來源處修正亂碼。
  3. 刪除標題列,檢查欄位名稱,並確認每一列的欄位數都相同。
  4. 找出重複列,並決定要保留哪一個版本。
  5. 將日期轉換為年-月-日,移除分隔符號,並將識別碼設為文字。
  6. 檢查每一欄的型別,然後分析是否有空缺值和離群值。

快速解答

為什麼值看起來一模一樣,查找卻失敗?

通常是某個儲存格中含有空格、不換行空格或位元組順序標記。移除隱藏字元後再試一次。

為什麼我的日期變成別的東西?

程式可能以錯誤的順序讀取日在前或月在前的日期,或把文字轉換成它自己的日期格式。請先自行將日期轉換為年-月-日。

借助 AI 協助,由英文原文翻譯而成。

留言

    還沒有留言,搶先留言吧。

    您的評分(選填)

    您的電子郵件不會顯示,也不會被保存。

    Open Data for AGI - Why Public, Free, and Open Datasets Matter 的封面Open Data for AGI - Why Public, Free, and Open Datasets Matter

    為何公開、免費且開放的資料集,對通用人工智慧的影響將與演算法和運算能力一樣大。

    $4.99在 Gumroad 購買英文版