The DataFrame.to_numpy()
函数,由提供Pandas库,提供了一种将 DataFrame 转换为NumPy 数组.
它返回一个 ndarray(NumPy 的基本数据结构),可以使用各种 NumPy 库函数轻松操作它。
当您想要执行比 Pandas 更容易或更快地在 NumPy 中实现的操作时,这尤其有用。
为什么从 Pandas DataFrame 转换为 NumPy?
您想要将 Pandas DataFrame 转换为 NumPy 数组的原因有多种。
当涉及数值或数学运算时,NumPy 库通常更高效,因为它支持数组数据类型,从而可以加快计算速度。
此外,许多机器学习库(例如 Scikit-learn)要求输入采用 NumPy 数组的形式。
在本教程的后面部分,您将看到一些将 DataFrame 转换为 NumPy 数组的实际用途和实际示例。
语法和参数
The DataFrame.to_numpy()
功能很简单。其语法如下:
DataFrame.to_numpy(dtype=None, copy=False, na_value=None)
Where:
-
dtype
是一个可选参数,指定数组所需的数据类型。如果未提供,Pandas 会根据 DataFrame 的 dtypes 确定 dtype。
-
copy
是一个布尔标志,当设置为 True 时,可确保返回的数组是 DataFrame 数据的副本。默认值为 False。
-
na_value
定义用于填充 NaN 值的值。如果未指定,NaN 值将使用所选数据类型的默认 NaN 值填充。
将 Pandas DataFrame 转换为 NumPy 数组
将 Pandas DataFrame 转换为 NumPy 数组。
Step 1:导入所需的库
第一步涉及导入 Pandas 和 NumPy。
import pandas as pd
import numpy as np
Step 2:创建数据框
Next, 创建一个数据框:
df = pd.DataFrame({
'A': [1.5, 2.3, 3.1],
'B': [4.2, 5.8, 6.7]
})
您可以使用以下任一方式加载数据来创建 DataFrame:
使用 Python Pandas read_csv 读取 CSV
使用 Python Pandas read_json 读取 JSON 文件
使用 Pandas read_sql 将 SQL 查询/表读入 DataFrame
使用 Pandas read_html 函数读取 HTML 表格
使用 Pandas read_parquet 读取 Parquet 文件
Step 3:将 DataFrame 转换为 NumPy 数组
现在,使用以下命令将 DataFrame 转换为 NumPy 数组DataFrame.to_numpy()
功能。您可以选择指定数据类型。在本例中,我们将数据转换为“float64”。
array = df.to_numpy(dtype='float64')
Step 4:打印结果数组或按照您想要的方式处理它。
最后,打印生成的 NumPy 数组以确认转换。
print(array)
Output:
array([[1.5, 4.2],
[2.3, 5.8],
[3.1, 6.7]])
我们现在已经成功地将 Pandas DataFrame 转换为“float64”类型的 NumPy 数组。
DataFrame 中的每一行对应于 ndarray 中的一行,保留原始结构。
数据类型处理
The DataFrame.to_numpy()
功能提供dtype
允许您指定所需输出数据类型的参数。
如果没有指定,则DataFrame.to_numpy()
函数将尝试推断最佳数据类型。
然而,如果 DataFrame 包含混合数据类型,这有时会导致数据类型为“object”,这可能是不可取的,特别是当您打算对结果数组执行数学运算时。
以下是在转换期间指定 dtype 的示例:
df = pd.DataFrame({
'A': [1, 2, 3],
'B': ['a', 'b', 'c']
})
array = df.to_numpy(dtype='str')
print(array)
Output:
array([['1', 'a'],
['2', 'b'],
['3', 'c']], dtype='<U1')
在这里,即使列“A”包含整数,我们也成功地将整个 DataFrame 转换为数据类型“str”的 NumPy 数组。
保留元数据
将 Pandas DataFrame 转换为 NumPy 数组时要记住的一件重要事情是,列名和索引等元数据不会保留在生成的 NumPy 数组中,因为它是较低级别的数据结构。
但是,您可以在转换之前将列名单独存储在变量中,如下所示:
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
# store column names
column_names = df.columns.tolist()
array = df.to_numpy()
print("Column Names:", column_names)
print("Array:n", array)
Output:
Column Names: ['A', 'B']
Array:
[[1 4]
[2 5]
[3 6]]
在输出中,我们将列名保留在column_names
列表,并将数据转换为 NumPy 数组。
如何处理缺失值?
使用以下命令将 DataFrame 转换为 NumPy 数组时DataFrame.to_numpy()
,默认情况下,Pandas 会将缺失值(NaN)转换为 ndarray 中特定类型的默认值,通常是np.nan
.
如果您想用特定值填充缺失值,可以使用na_value
的参数to_numpy()
函数,如下图:
df = pd.DataFrame({
'A': [1, 2, np.nan],
'B': [4, np.nan, 6]
})
# convert dataframe to numpy array filling NaN with -1
array = df.to_numpy(na_value=-1)
print(array)
Output:
array([[ 1., 4.],
[ 2., -1.],
[-1., 6.]])
在这个例子中,我们使用了na_value
将所有 NaN 替换为的参数-1
在生成的 ndarray 中。
使用 to_numpy() 的实际示例
在某些情况下,您可能需要将 DataFrame 转换为 NumPy 数组,以便在 NumPy 中更轻松或更高效地进行某些操作。
使用 Scikit-Learn 进行机器学习
如果您正在开发一个项目,您需要根据卧室数量、房屋大小、位置等特征来预测房价。
您可以开始使用 Pandas 来处理数据,因为它提供了强大的数据操作工具并且可以很好地处理异构类型的数据。
import pandas as pd
data = pd.read_csv('house_prices.csv')
现在,当您想使用 scikit-learn 在此数据上训练机器学习模型时,必须将 DataFrame 转换为 NumPy 数组:
# Split the data into features and target
X = data.drop('Price', axis=1) # Features
y = data['Price'] # Target
# Convert DataFrame to NumPy array
X = X.to_numpy()
y = y.to_numpy()
现在您可以使用这些数据在 scikit-learn 模型中进行训练和测试:
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
# Split data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LinearRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
在此示例中,使用 scikit-learn 库需要将 pandas DataFrame 转换为 numpy 数组。
使用 OpenCV 进行图像处理
如果您正在开发一个计算机视觉项目,您需要对不同手写数字的图像进行分类。标签(数字)和图像文件名存储在 CSV 文件中。
import pandas as pd
data = pd.read_csv('image_labels.csv')
print(data.head())
Output:
ImageName Label
0 img1.png 7
1 img2.png 2
2 img3.png 1
3 img4.png 0
4 img5.png 4
您必须加载图像以进行进一步处理OpenCV。为此,您需要将相关 DataFrame 列转换为 NumPy 数组。
import cv2
import numpy as np
images = [cv2.imread(f'images/{name}', cv2.IMREAD_GRAYSCALE) for name in data['ImageName']]
# Convert list to NumPy array
images = np.array(images)
# Similarly, convert labels to NumPy array
labels = data['Label'].to_numpy()
此示例说明了如何使用 Pandas 开始处理和检查数据,但随后需要转换为 NumPy 数组以进行图像处理。
使用 NumPy 的财务函数
如果您在一家金融公司工作,并且您有一个数据集,其中包含有关具有不同年利率和条款的多种投资选项的信息。
import pandas as pd
data = pd.read_csv('investments.csv')
print(data.head())
Output:
Investment_Name Annual_Interest_Rate Term_in_Years
0 Investment A 0.05 5
1 Investment B 0.06 7
2 Investment C 0.04 3
3 Investment D 0.08 10
4 Investment E 0.07 8
假设要计算每个选项的 1000 美元投资的未来价值。
您可以使用 NumPyfv
函数,需要利率、期数、付款和现值作为输入,所有这些都应该采用 NumPy 数组的格式。
import numpy as np
# Convert pandas DataFrame columns to NumPy arrays
rates = data['Annual_Interest_Rate'].to_numpy()
terms = data['Term_in_Years'].to_numpy()
# Constants
pv = -1000 # (it's negative as it's an outgoing payment)
pmt = 0
# Calculate future value of investment using NumPy's fv function
fv = np.fv(rates, terms, pmt, pv)
for i, investment in enumerate(data['Investment_Name']):
print(f"The future value of a $1000 investment in {investment} after {terms[i]} years is ${fv[i]:.2f}")
在此示例中,将 Pandas DataFrame 转换为 NumPy 数组是由 NumPy 财务功能的要求驱动的。