Pandas 中如何從文字檔案載入資料

Asad Riaz 2023年1月30日
  1. 使用 read_csv() 方法從文字檔案載入資料
  2. 使用 read_fwf() 方法將寬度格式的文字檔案載入到 Pandas dataframe 中
  3. 使用 read_table() 方法將文字檔案載入到 Pandas dataframe 中
Pandas 中如何從文字檔案載入資料

我們將介紹 Pandas Dataframe 從 txt 檔案中載入資料的方法。我們還將介紹可用的選項。

首先,我們將建立一個名為 sample.txt 的簡單文字檔案,並在檔案中新增以下幾行:

45 apple orange banana mango
12 orange kiwi onion tomato

我們需要將其儲存到執行 Python 指令碼的目錄中。

使用 read_csv() 方法從文字檔案載入資料

read_csv() 是將文字檔案轉換為 Pandas Dataframe 的最佳方法。我們需要設定 header=None,因為上面建立的檔案中沒有任何 header。如果我們希望將空值替換為 NaN,我們還可以在方法內部設定 keep_default_na=False

示例程式碼:

# python 3.x
import pandas as pd

df = pd.read_csv("sample.txt", sep=" ", header=None)
print(df)

輸出:

    0       1       2       3       4
0  45   apple  orange  banana   mango
1  12  orange    kiwi   onion  tomato

我們將設定 sep =" " 因為值之間用一個空格隔開。同樣,如果我們從逗號分隔的檔案中讀取資料,則可以設定 sep =","。將 sample.txt 中的空格替換為 ,,然後將 sep =" "替換為 sep =",",然後執行程式碼。

Sample.txt

45,apple,orange,banana,mango
12,orange,kiwi,,tomato

程式碼:

# python 3.x
import pandas as pd

df = pd.read_csv("sample.txt", sep=",", header=None)
print(df)

輸出:

    0       1       2       3       4
0  45   apple  orange  banana   mango
1  12  orange    kiwi     NaN  tomato

使用 read_fwf() 方法將寬度格式的文字檔案載入到 Pandas dataframe 中

當我們有一個寬度格式化文字檔案時,read_fwf() 將非常有用。我們不能使用 sep,因為不同的值可能具有不同的分隔符。考慮以下文字檔案:

Sample.txt

45 apple  orange banana mango
12 orange kiwi   onion  tomato

如果我們看一下 Sample.text,我們將看到分隔符 delimiter 對於每個值都不相同。所以 read_fwf() 將能達到我們正確讀取這個檔案資料的目的。

程式碼:

# python 3.x
import pandas as pd

df = pd.read_fwf("sample.txt", header=None)
print(df)

輸出:

    0       1       2       3       4
0  45   apple  orange  banana   mango
1  12  orange    kiwi   onion  tomato

使用 read_table() 方法將文字檔案載入到 Pandas dataframe 中

read_table() 是將資料從文字檔案載入到 Pandas DataFrame 的另一種方法。

Sample.txt:

45 apple orange banana mango
12 orange kiwi onion tomato

程式碼:

# python 3.x
import pandas as pd

df = pd.read_table("sample.txt", header=None, sep=" ")
print(df)

輸出:

    0       1       2       3       4
0  45   apple  orange  banana   mango
1  12  orange    kiwi   onion  tomato