pandas
dataframe
series
ndarray
看过来
《pandas 教程》 持续更新中,可作为 pandas 入门进阶课程、pandas 中文手册、用法大全,配有案例讲解和速查手册。提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。查看更新日志。作者开办 Python 数据分析培训,详情 Python 数据分析培训。
![]() |
本教程作者所著新书《Python之光:Python编程入门与实战》(ISBN:9787111729891)已由机械工业出版社出版上市,各大电商平台有售,欢迎:查看详情并关注购买。 |
![]() |
本教程作者所著新书《深入浅出Pandas:利用Python进行数据处理与分析》(ISBN:9787111685456)已由机械工业出版社出版上市,各大电商平台有售,欢迎:查看详情并关注购买。 |
众所周知,在特征处理和数据建模中,很多库使用的是 NumPy 的 ndarray 数据类型,Pandas 对数据处理后要应用到上述场景就需要将类型转为 NumPy 的 ndarray 。本文介绍如何将 Pandas 的 Series 和 Dataframe 转换为 NumPy 的 ndarray。
pandas v0.24.0 引入了两种从 pandas 对象获取 NumPy 数组的新方法:
ds.to_numpy()
, 它可以用在 Index, Series, 和 DataFrame 对象s.array
, 为 PandasArray,用在 Index 和 Series,它包装了 numpy.ndarray 接口pandas 的 values 和 as_matrix() 不赞成使用。这两个函数旨在提高 API 的一致性,这是朝着正确方向迈出的重要一步。最后,.values
和 as_matrix()
在当前版本中不会被弃用,但预计这可能会在将来的某个时候发生,因此建议用户尽快迁移到较新的 API。
df.values
和 df.to_numpy()
返回的是一个 array 类型:
df.values # 不建议
df.to_numpy()
'''
array([['Liver', 'E', 89, 21, 24, 64],
['Arry', 'C', 36, 37, 37, 57],
['Ack', 'A', 57, 60, 18, 84],
...
['Eli', 'E', 11, 74, 58, 91],
['Ben', 'E', 21, 43, 41, 74]], dtype=object)
'''
type(df.to_numpy())
# numpy.ndarray
df.to_numpy().dtype
# dtype('O')
type(df.to_numpy().dtype)
# numpy.dtype
# 指定列转
df[['name', 'Q1']].to_numpy()
对 Series 使用 s.values
和 s.to_numpy()
返回的是一个 array 类型:
df.Q1.values # 不建议
df.Q1.to_numpy()
'''
array([89, 36, 57, 93, 65, 24, 61 ...
91, 80, 97, 60, 79, 44, 80 ...
...
28, 50, 18, 10, 12, 21, 79...
38, 43, 87, 78, 15, 15, 73...
2, 14, 13, 96, 16, 38, 62...])
'''
type(df.Q1.to_numpy())
# numpy.ndarray
df.Q1.to_numpy().dtype
# dtype('int64')
type(df.Q1.to_numpy().dtype)
# numpy.dtype
type(df.Q1.to_numpy())
# pandas.core.arrays.numpy_.PandasArray
df.Q1.array
type(df.Q1.array)
# pandas.core.arrays.numpy_.PandasArray
您可以使用 to_records() 方法,但是如果数据类型不是您想要的,则必须对它们进行一些处理。在下例子中,从字符串复制 df 之后,索引类型是 string(由 pandas 中的object dtype 表示):
df.to_records()
type(df.to_records())
# numpy.recarray
np.array(df.to_records())
可以用 np.array
直接转换:
np.array(df) # Dataframe 转
np.array(df.Q1) # 直接转
np.array(df.Q1.array) # PandasArray 转
np.array(df.to_records().view(type=np.matrix)) # 转为矩阵