看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
众所周知,在特征处理和数据建模中,很多库使用的是 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)) # 转为矩阵
更新时间:2021-01-08 13:15:43 标签:pandas dataframe series ndarray