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

在机器学习领域,基于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

DataFramendarray

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

测试数据集

范例代码如下:

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) )
print(df2,type(df2))
print(df3,type(df3))

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

输出:

  name  age category
0   虎子    5      dog
1   老许    3      dog
2  二赖子    6      dog
3   老白    8      cat
4   小黑   10      cat 
<class 'pandas.core.frame.DataFrame'>

  name  age category
0   虎子    5      dog
1   老许    3      dog 
<class 'pandas.core.frame.DataFrame'>

0    dog
1    dog
2    dog
3    cat
4    cat
Name: category, dtype: object 
<class 'pandas.core.series.Series'>
DataFrame的某一列数据,类型是Series

参考苏南大叔的文章:

两种转换方法

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

df.values
numpy.array(df)

测试代码:

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类型数据,可以利用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))
print(x2,type(x2))
print(x3,type(x3))

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

输出:

[[ 0  1]
 [ 2  3]
 [ 4  5]
 [ 6  7]
 [ 8  9]
 [10 11]]
<class 'numpy.ndarray'>

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]] 
<class 'numpy.ndarray'>

[[ 0]
 [ 1]
 [ 2]
 [ 3]
 [ 4]
 [ 5]
 [ 6]
 [ 7]
 [ 8]
 [ 9]
 [10]
 [11]]
<class 'numpy.ndarray'>
这个reshape()操作非常有用,如果把ndarray想象成一个矩形的话,那么,reshape()操作就赋予了其任意变形的能力。

参考苏南大叔的文章:

转化方法

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

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的概念。

总结

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

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

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

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

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