簡體   English   中英

導入具有表示為新列的額外行的 CSV

[英]Importing CSV that has an extra row represented as new columns

正如標題所說,我正在嘗試導入大約 30 個 CSV 文件並將其合並為一個。 每個文件有 15 個“正確”列,另外還有 15 列僅包含一行數據。 所以,總的來說,每個文件似乎有 30 列,但實際上應該只有 15 列,第二組列應該作為額外的行附加到我的數據的底部。 對於較小的示例,它看起來像這樣:

Col1 Col2 Col3 Col4 Col5 5.87 6.12 5.50 4.98 2.87
2.50 3.50 5.66 5.23 2.11
1.12 9.99 1.15 5.44 3.12

我希望將這 5 個“額外”列(實際上只是一個額外的行)並將它們移動到我的數據底部,作為另一行,而不是顯示為另外 5 個列。

問題是每個 csv 中的標題都有問題。 您可以設置 csv 讀取器和寫入器,並在每個新輸入文件的開頭檢查標題是否太長。 您將在第一個 csv 之后隱藏標題並隨時插入錯誤的行

output_csv = 'out.csv'
have_header = False

with open(output_csv, newline='', encoding='utf-8') as out_fp:
    writer = csv.writer(out_fp)
    for input_csv in input_csvs:
        with open(input_csv, newline='', encoding='utf-8') as in_fp:
            reader = csv.reader(in_fp)
            end_rows = []
            header = next(reader)
            # check for botched first line where some upstream
            # program can't get its newlines right
            if len(header) > 15:
                header = header[:15]
                first_row = header[15:]
            else:
                first_row = None
            if not have_header:
                writer.writerow(header)
                have_header = True
            if first_row:
                writer.writerow(first_row)
            write.writerows(reader)

這會有所幫助。

data = pd.read_csv("text.csv")
data = data.iloc[:,:15].append(data.iloc[1,15:])

這將削減第二個 15 列並在底部附加第一行。

您可以簡單地從列索引的最后一部分構建一個單行數據框,將其附加到數據框,並只保留相關列:

n = len(df.columns)/2
df = df.append(pd.DataFrame([df.columns[n:].tolist()], columns=df.columns[:n]))[df.columns[:n]]

暫無
暫無

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

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