當輸入檔案有時是 .csv 有時是 .xls 時,在檔案中查找第一個換行符的最佳方法是什么。換行是有保證的,但是在讀取檔案時換行總是隨機的。輸入檔案將有一定數量的行,總是在頂部。該資料可以通過一兩行來改變。所以我會跳過前 4、5、6,因為這種不可預測性。我的目標是將超過該點的資料讀入 DataFrame,跳過那些第一行。第一個空白行之后的行是我將開始將資料讀入df. 所以只是跳過這個可變數量的行是我所缺少的,我有一個識別檔案型別的小函式,如果該代碼回傳 true,則檔案是 xls 檔案,如果回傳 false,則檔案是 CSV 檔案。在我的示例檔案中,第一個空白行位于第 7 行。
1:CSV
這會永遠讀取,我必須中斷執行才能退出程式。一個關鍵點,當運行 f.readline() 并逐行查看輸出時,我注意到該檔案通過了空白行,因為它'\n'與預期不符。相反,它總是',,,,,,,,,,\n'在我的許多 csv 檔案中沒有一致性。我如何撰寫一些東西來將其識別為空白行,而不總是調整代碼以說明 CSV 檔案中第一個空白行中的新逗號數量?
import pandas as pd
file = 'input_file.csv'
f = open(file)
while f.readline() not in ('\n'):
pass
final_df = pd.read_csv(f, header=None)
例子file。
| 報告 | |||
|---|---|---|---|
| 隨機資訊 | |||
| 更多資訊 | |||
| 專案編號 | 111111 | ||
| 訂單號 | |||
| 盤子 | 板1 | 板2 | 板3 |
| DNA \檢測 | id1 | id2 | id3 |
| 名稱1 | C:C | G:G | T:C |
| 名稱2 | C:C | G:G | C:C |
| 名稱3 | C:C | G:G | T:C |
正在尋找換行符的 readline 函式的當前輸出,在換行符處:
',,,,,,,,,,\n'
final_df預期產出
| DNA \檢測 | id1 | id2 | id3 |
|---|---|---|---|
| 名稱1 | C:C | G:G | T:C |
| 名稱2 | C:C | G:G | C:C |
| 名稱3 | C:C | G:G | T:C |
2:XLS
當檔案是 xls 檔案格式時,它們看起來與我上面使用的示例檔案完全相同。示例檔案提供了該問題所需的資料,無需更改。
如果檔案作為 xls 檔案輸入,我的想法是讀取檔案
import pandas as pd
df = pd.read_excel(file)
f = tempfile.NamedTemporaryFile()
df.to_csv(f)
f.seek(0)
line = str(f.readline()).strip()
print(line)和回傳后的當前輸出
b',report,Unnamed: 1,Unnamed: 2,Unnamed: 3,Unnamed: 4,Unnamed: 5,Unnamed: 6,Unnamed: 7,Unnamed: 8,Unnamed: 9,Unnamed: 10,Unnamed: 11,Unnamed: 12,Unnamed: 13,Unnamed: 14,Unnamed: 15,Unnamed: 16,Unnamed: 17,Unnamed: 18,Unnamed: 19,Unnamed: 20,Unnamed: 21,Unnamed: 22,Unnamed: 23,Unnamed: 24,Unnamed: 25,Unnamed: 26,Unnamed: 27,Unnamed: 28,Unnamed: 29,Unnamed: 30,Unnamed: 31,Unnamed: 32,Unnamed: 33,Unnamed: 34,Unnamed: 35,Unnamed: 36,Unnamed: 37,Unnamed: 38,Unnamed: 39,Unnamed: 40,Unnamed: 41,Unnamed: 42,Unnamed: 43,Unnamed: 44,Unnamed: 45,Unnamed: 46\n'
如果有另一種方法可以找到第一個空行,我不想繼續以這種方式讀取檔案pd.read_excel(line)。
預期的輸出與上面列出的相同final_df
理想情況下,我會使用類似的東西final_df = pd.read_csv(line)來生產final_df, 那是行不通的。
| DNA \檢測 | id1 | id2 | id3 |
|---|---|---|---|
| 名稱1 | C:C | G:G | T:C |
| 名稱2 | C:C | G:G | C:C |
| 名稱3 | C:C | G:G | T:C |
uj5u.com熱心網友回復:
我認為最簡單的方法來處理這個問題,特別是考慮到你可能有 csv 或 xls 檔案是讀取資料并在之后清理它。像這樣的東西可能會有所幫助,并且適用于兩種格式:
df = pd.read_excel(file)
new_line = min(df[df.iloc[:,0].isnull()].index)
df.columns = df.iloc[new_line 1]
df = df.iloc[new_line 2:, :]
本質上,您閱讀整個檔案,找到第一個空行,然后從“new_line”開始重建資料幀。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/466925.html
