簡體   English   中英

從大型 CSV 文件中刪除最后一列

[英]Remove last column from large CSV file

我有一個大的 CSV 文件,我想使用 datagrip 上傳到 postgres。 當我上傳它時,我收到一些記錄的以下錯誤:

11807:98: actual: value separator (,), expected: record separator (\n) 

問題是只識別了 19 列,並且在極少數記錄中有 20 個值。 對於那些記錄,它根本不導入記錄。 我確實想在我的數據庫中有所有行。

我認為這將是 python 中的小菜一碟。 所以我開始使用 pandas 並使用以下行加載數據:

 df = pd.read_csv('filename.csv', sep='delimiter', header=None)

那確實包含文件。 然而,要刪除 19 逗號后面的所有值,或者只添加完整的第 20 列,我以后可以刪除它,這比我預期的要困難得多。 感覺這是一個微不足道的問題,我需要朝着正確的方向努力。

這會生成一個包含 30 列的 dataframe,然后刪除第 20 列之后的所有列。

df = pd.DataFrame({f"col{i}":[1,2,3] for i in range(30)})

df = df.drop(columns=[c for c in df.columns[20:]])

以這種方式將其讀入 dataframe 不會給您帶來任何好處,因為每個單元格都將包含一行文件。

請改用csv模塊,因為它不會嘗試將文件作為固定寬度的表格讀取。

import csv

with open('filename.csv', 'r') as i, open('fixed.csv', 'w') as o:
    cr = csv.reader(i)
    cw = csv.writer(o)
    for row in cr:
        cw.writerow(row[0:19])


暫無
暫無

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

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