当前位置:首页 > Python > 正文

Python中Array和DataFrame相互转换完全指南 | 数据科学教程

Python中Array与DataFrame相互转换

NumPy和Pandas高效数据转换完全指南

为什么需要Array和DataFrame转换?

在Python数据科学领域,NumPy数组Pandas DataFrame是最常用的两种数据结构:

  • NumPy数组 - 高效的数值计算容器,适合数学运算和机器学习算法
  • Pandas DataFrame - 带标签的二维数据结构,适合数据处理和分析

实际项目中经常需要在两者间转换,本教程将详细介绍多种转换方法和使用场景。

环境准备

开始前请确保已安装以下Python库:

pip install numpy pandas

在Python脚本中导入必要的库:

import numpy as np
import pandas as pd

一、Array转换为DataFrame

1. 基本转换方法

使用pd.DataFrame()函数直接转换NumPy数组:

# 创建NumPy数组
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 转换为DataFrame
df = pd.DataFrame(arr)
print(df)

输出结果:

   0  1  2
0  1  2  3
1  4  5  6
2  7  8  9

2. 添加列名和索引

自定义DataFrame的列名和行索引:

# 带列名和索引的转换
df = pd.DataFrame(
    arr,
    columns=['A', 'B', 'C'],
    index=['Row1', 'Row2', 'Row3']
)
print(df)

输出结果:

      A  B  C
Row1  1  2  3
Row2  4  5  6
Row3  7  8  9

3. 处理一维数组

一维数组转换为单列DataFrame:

# 一维数组
arr_1d = np.array([10, 20, 30, 40, 50])

# 转换为DataFrame
df_1d = pd.DataFrame(arr_1d, columns=['Values'])
print(df_1d)

输出结果:

   Values
0      10
1      20
2      30
3      40
4      50

二、DataFrame转换为Array

1. 使用values属性

通过DataFrame的values属性转换为NumPy数组:

# 创建示例DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35],
        'Salary': [50000, 60000, 70000]}
df = pd.DataFrame(data)

# 转换为NumPy数组
arr_from_df = df.values
print(arr_from_df)

输出结果:

[['Alice' 25 50000]
 ['Bob' 30 60000]
 ['Charlie' 35 70000]]

2. 使用to_numpy()方法

Pandas推荐使用to_numpy()方法进行转换:

# 使用to_numpy()方法
arr_from_df = df.to_numpy()
print(arr_from_df)

# 转换特定列
age_array = df['Age'].to_numpy()
print("\nAge列数组:", age_array)

输出结果:

[['Alice' 25 50000]
 ['Bob' 30 60000]
 ['Charlie' 35 70000]]

Age列数组: [25 30 35]

三、转换场景应用示例

1. 机器学习数据预处理

DataFrame预处理后转换为数组供机器学习模型使用:

from sklearn.datasets import load_iris

# 加载数据集到DataFrame
iris = load_iris()
df = pd.DataFrame(
    data=np.c_[iris.data, iris.target],
    columns=iris.feature_names + ['target']
)

# 分离特征和目标
X = df[iris.feature_names].to_numpy()
y = df['target'].to_numpy()

print("特征矩阵形状:", X.shape)
print("目标数组形状:", y.shape)

输出结果:

特征矩阵形状: (150, 4)
目标数组形状: (150,)

2. 处理数组后转回DataFrame

对数组进行计算后,将结果转换回DataFrame:

# 创建示例DataFrame
df = pd.DataFrame(np.random.rand(5, 3), columns=['A', 'B', 'C'])

# 转换为数组并进行计算
arr = df.to_numpy()
normalized_arr = arr / arr.max(axis=0)  # 按列归一化

# 转回DataFrame
normalized_df = pd.DataFrame(
    normalized_arr,
    columns=[col + '_norm' for col in df.columns],
    index=df.index
)

print("原始DataFrame:")
print(df.head())
print("\n归一化后的DataFrame:")
print(normalized_df.head())

输出示例:

原始DataFrame:
          A         B         C
0  0.548814  0.715189  0.602763
1  0.544883  0.423655  0.645894
2  0.437587  0.891773  0.963663
3  0.383442  0.791725  0.528895
4  0.568045  0.925597  0.071036

归一化后的DataFrame:
     A_norm    B_norm    C_norm
0  0.966099  0.772926  0.625574
1  0.959067  0.457780  0.670368
2  0.770360  0.963663  1.000000
3  0.675056  0.855489  0.548899
4  1.000000  1.000000  0.073738

四、注意事项与最佳实践

  • 数据类型一致性:转换时注意数据类型的改变,特别是混合类型DataFrame转换为数组时
  • 内存管理:大型数据集转换时注意内存使用,考虑分块处理
  • 方法选择
    • 使用to_numpy()替代values属性(Pandas推荐方式)
    • 转换时指定dtype参数控制数据类型
  • 索引处理:转换到数组时会丢失索引信息,必要时需单独保存
  • 性能考量:NumPy数组操作通常比Pandas DataFrame更快,适合数值计算密集型任务

© 2023 Python数据处理教程 | Array与DataFrame转换指南

发表评论