我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

在机器学习领域,基于pandansdataframe数据类型、基于numpyndarray数据类型,都是非常常见的。处理各种原始数据的时候,经常会碰到。那么,不可避免的会碰到两者做类型互转的情况。那么,本文中,将基于python编程语言,对DataFrame类型和ndarray类型做互转的方法,做简要的说明。

苏南大叔:python,如何实现DataFrame和ndarray的类型互转? - dataframe和ndarray类型互转
python,如何实现DataFrame和ndarray的类型互转?(图6-1)

大家好,这里是苏南大叔的“平行空间笔记本”博客,记录苏南大叔和计算机代码的故事。在机器学习的数据处理阶段,最常见的DataFrame类型和ndarray类型的互转方法,在这里将要被描述。测试环境:win10python@3.11.0numpy@1.24.2pandas@1.5.3

写在最前面的是:本文中的ndarray是个二维数组,二维的,维度是2。虽然存在其它维度的ndarray,但是并不适合本文。

DataFramendarray

有两种方式可以实现DataFramendarray的转化,这两种方法是:

df.values
numpy.array(df)

测试代码

定义一个DataFrame类型数据,可以使用loc或者ilocDataframe进行简单的加工。

DataFrame的某一列数据,类型是Series

参考苏南大叔的文章:

import pandas as pd
from pandas import Series, DataFrame
df = DataFrame({
    'name':[
        '虎子',
        '老许',
        '二赖子',
        '老白',
        '小黑',
    ],
    'age':[5,3,6,8,10],
    'category':["dog","dog","dog","cat","cat"]
})
df2 = df.iloc[0:2][:]         # 前两行行数据
df3 = df.loc[:]["category"]   # 最后一列数据

print(df ,type(df) )          # <class 'pandas.core.frame.DataFrame'>
print(df2,type(df2))          # <class 'pandas.core.frame.DataFrame'>
print(df3,type(df3))          # <class 'pandas.core.series.Series'>

苏南大叔:python,如何实现DataFrame和ndarray的类型互转? - dataframe定义及操作
python,如何实现DataFrame和ndarray的类型互转?(图6-2)

import numpy as np
_np  = df.values
_np2 = df2.values
_np3 = df3.values

print(_np ,type(_np))
print(_np2,type(_np2))
print(_np3,type(_np3))

_np  = np.array(df)
_np2 = np.array(df2)
_np3 = np.array(df3)

print(_np ,type(_np))
print(_np2,type(_np2))
print(_np3,type(_np3))

苏南大叔:python,如何实现DataFrame和ndarray的类型互转? - df-ndarray
python,如何实现DataFrame和ndarray的类型互转?(图6-3)

输出:

[['虎子' 5 'dog']
 ['老许' 3 'dog']
 ['二赖子' 6 'dog']
 ['老白' 8 'cat']
 ['小黑' 10 'cat']] 
<class 'numpy.ndarray'>

[['虎子' 5 'dog']
 ['老许' 3 'dog']] 
<class 'numpy.ndarray'>

['dog' 'dog' 'dog' 'cat' 'cat'] 
<class 'numpy.ndarray'>

[['虎子' 5 'dog']
 ['老许' 3 'dog']
 ['二赖子' 6 'dog']
 ['老白' 8 'cat']
 ['小黑' 10 'cat']] 
<class 'numpy.ndarray'>

[['虎子' 5 'dog']
 ['老许' 3 'dog']] 
<class 'numpy.ndarray'>

['dog' 'dog' 'dog' 'cat' 'cat'] 
<class 'numpy.ndarray'>

ndarrayDataFrame

ndarray转为DataFrame的方式,目前有下面一种方式:

pd.DataFrame(x)

测试代码

再定义一个ndarray类型数据,可以利用reshape对数据进行简单的再加工。参考苏南大叔的文章:

import numpy as np
x = np.array([[0,1],[2,3],[4,5],[6,7],[8,9],[10,11]])
x2 = x.reshape((3,4))
x3 = x.reshape((12,1))
print(x,type(x))     # <class 'numpy.ndarray'>
print(x2,type(x2))   # <class 'numpy.ndarray'>
print(x3,type(x3))   # <class 'numpy.ndarray'>

苏南大叔:python,如何实现DataFrame和ndarray的类型互转? - ndarray定义
python,如何实现DataFrame和ndarray的类型互转?(图6-4)

这个reshape()操作非常有用,如果把ndarray想象成一个矩形的话,那么,reshape()操作就赋予了其任意变形的能力。
import pandas as pd
df = pd.DataFrame(x)
df2 = pd.DataFrame(x2)
df3 = pd.DataFrame(x3)

print(df,type(df))
print(df2,type(df2))
print(df3,type(df3))

苏南大叔:python,如何实现DataFrame和ndarray的类型互转? - 转化为dataframe
python,如何实现DataFrame和ndarray的类型互转?(图6-5)

输出:

    0   1
0   0   1
1   2   3
2   4   5
3   6   7
4   8   9
5  10  11 
<class 'pandas.core.frame.DataFrame'>

   0  1   2   3
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11 
<class 'pandas.core.frame.DataFrame'>

     0
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
10  10
11  11 
<class 'pandas.core.frame.DataFrame'>
这里有个很有意思的现象,DataFrame的一列数据,取出来叫做series类型。但是ndarray的一列数据,转换过去之后,依然是DataFrame类型。

题外话,两种数据类型区别

关于ndarray这个类型的拼写,这里做个简要的对比,见下图:

苏南大叔:python,如何实现DataFrame和ndarray的类型互转? - 拼写对比
python,如何实现DataFrame和ndarray的类型互转?(图6-6)

拼写方面来说,np+.array=>ndarray,而不是nparray

苏南大叔个人理解着,ndarraydataframe的主要区别就是:

  • dataframe有行号和列号(表头)。
  • ndarray并没有这个表头索引,但是有个shape的概念。
想象一下,ndarraydataframe的区别,就类似于csvxls的区别。普通的类型就是ndarray,加工后的类型就是dataframe。不知道,大家是否同意苏南大叔的观点。

总结

其实,DataFrame和ndarray的相互转化的最简单的方法,就是强制类型转换!哈哈哈!

numpy.array(df)
pd.DataFrame(x)

更多经验文章,可以参考苏南大叔的python系列文章:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python