首頁 >後端開發 >Python教學 >如何有效地將 Pandas DataFrame 轉換為 NumPy 陣列?

如何有效地將 Pandas DataFrame 轉換為 NumPy 陣列?

Linda Hamilton
Linda Hamilton原創
2024-12-14 17:24:10872瀏覽

How to Efficiently Convert a Pandas DataFrame to a NumPy Array?

將 Pandas Dataframe 轉換為 NumPy 陣列

要將 pandas Dataframe 轉換為 NumPy 陣列,建議使用 df.to_numpy() 方法。由於多種原因,此方法優於 df.values,如下所述。

使用df.to_numpy()

呼叫df.to_numpy()方法允許從底層NumPy 陣列中擷取dataframe.

import numpy as np
import pandas as pd

index = [1, 2, 3, 4, 5, 6, 7]
a = [np.nan, np.nan, np.nan, 0.1, 0.1, 0.1, 0.1]
b = [0.2, np.nan, 0.2, 0.2, 0.2, np.nan, np.nan]
c = [np.nan, 0.5, 0.5, np.nan, 0.5, 0.5, np.nan]
df = pd.DataFrame({'A': a, 'B': b, 'C': c}, index=index)
df = df.rename_axis('ID')

arr = df.to_numpy()
print(arr)

輸出:

[[ nan  0.2  nan]
 [ nan  nan  0.5]
 [ nan  0.2  0.5]
 [ 0.1  0.2  nan]
 [ 0.1  0.2  0.5]
 [ 0.1  nan  0.5]
 [ 0.1  nan  nan]]

保留Dtypes

如果目標是維護結果中的資料型態NumPy 數組,一個可能的方法涉及利用DataFrame.to_records(),如圖所示:

records_array = df.to_records()
print(records_array)

輸出:

rec.array([('a', 1, 4, 7), ('b', 2, 5, 8), ('c', 3, 6, 9)],
           dtype=[('ID', '<U1'), ('A', '<i8'), ('B', '<i8'), ('C', '<i8')])

作為一種替代方案,可以使用np.rec.fromrecords:

v = df.reset_index()
records_array = np.rec.fromrecords(v, names=v.columns.tolist())
print(records_array)

輸出:

rec.array([('a', 1, 4, 7), ('b', 2, 5, 8), ('c', 3, 6, 9)],
           dtype=[('index', '<U1'), ('A', '<i8'), ('B', '<i8'), ('C', '<i8')])

使用這兩種方法中的任何一種都可以確保 NumPy 中資料類型的保存數組。

以上是如何有效地將 Pandas DataFrame 轉換為 NumPy 陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn