为了账号安全,请及时绑定邮箱和手机立即绑定

请问如何将熊猫系列或索引转换为Numpy数组?

请问如何将熊猫系列或索引转换为Numpy数组?

素胚勾勒不出你 2019-08-02 07:02:18
如何将熊猫系列或索引转换为Numpy数组?您知道如何将DataFrame的索引或列作为NumPy数组或python列表吗?
查看完整描述

3 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

若要获取NumPy数组,应使用values属性:

In [1]: df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['a', 'b', 'c']); df
   A  B
a  1  4b  2  5c  3  6In [2]: df.index.valuesOut[2]: array(['a', 'b', 'c'], dtype=object)

这将访问数据的存储方式,因此不需要进行转换。
注:这个属性也适用于许多其他熊猫的物体。

In [3]: df['A'].valuesOut[3]: Out[16]: array([1, 2, 3])

若要将索引作为列表获取,请调用tolist:

In [4]: df.index.tolist()Out[4]: ['a', 'b']

同样的,列也是。




查看完整回答
反对 回复 2019-08-03
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

你可以用df.index访问索引对象,然后使用以下方法获取列表中的值df.index.tolist()..类似地,您可以使用df['col'].tolist()为了系列赛。

查看完整回答
反对 回复 2019-08-03
?
临摹微笑

TA贡献1982条经验 获得超2个赞

电流截至.v0.24.0+, 2019.

不建议使用.values赞成这些方法!

从v0.24.0开始,我们将有两种新的、更好的方法来获得NumPy数组IndexSeries,和DataFrame对象:它们是to_numpy(),和.array..关于使用,文档提到:

我们没有删除或反对Series.valuesDataFrame.values,但是我们强烈推荐和使用.array.to_numpy()相反。

看见V0.24.0发行说明的这一部分想了解更多信息。


to_numpy()方法

df.index.to_numpy()# array(['a', 'b'], dtype=object)df['A'].to_numpy()#  array([1, 4])

默认情况下,将返回视图。任何修改将影响原件。

v = df.index.to_numpy()v[0] = -1df
    A  B-1  1  2b   4  5

如果您需要副本,请使用to_numpy(copy=True);

v = df.index.to_numpy(copy=True)v[-1] = -123df
   A  B
a  1  2b  4  5

请注意,此函数也适用于DataFrames(同时.array)。


array属性
此属性返回ExtensionArray对象,该对象支持索引/序列。

pd.__version__# '0.24.0rc1'# Setup.df = pd.DataFrame([[1, 2], [4, 5]], columns=['A', 'B'], index=['a', 'b'])df

   A  B
a  1  2b  4  5


df.index.array    
# <PandasArray># ['a', 'b']# Length: 2, dtype: objectdf['A'].array# <PandasArray># [1, 4]# Length: 2, dtype: int64

从这里,可以使用list:

list(df.index.array)# ['a', 'b']list(df['A'].array)# [1, 4]

或者直接打电话.tolist():

df.index.tolist()# ['a', 'b']df['A'].tolist()# [1, 4]

关于归还的内容,医生们提到,

SeriesIndex由普通NumPy数组支持的ES,Series.array将返回一个新的arrays.PandasArray,它是一个薄的(无副本)包装器。numpy.ndarrayarrays.PandasArray它本身并不特别有用,但它确实提供了与在熊猫或第三方库中定义的任何扩展数组相同的接口。

总之,.array将返回

  1. 现有

    ExtensionArray

    支持索引/系列,或
  2. 如果有一个NumPy数组支持该系列,则将生成一个新的

    ExtensionArray

    对象是作为底层数组上的一个薄包装器创建的。

添加两种新方法的理由
这些职能是在两个GitHub问题下讨论的结果而增加的。GH 19954GH 23623.

具体来说,文档提到了理由:

[.]带着.values还不清楚返回的值是实际数组,还是它的某些转换,还是熊猫自定义数组之一(如Categorical)。例如,用PeriodIndex.values生成一个新的ndarray每次的句点对象。[.]

这两个函数旨在提高API的一致性,这是朝着正确方向迈出的重要一步。

最后,.values在当前版本中不会受到反对,但是我预计这种情况可能会在将来的某个时候发生,所以我会敦促用户尽快迁移到更新的API中。




查看完整回答
反对 回复 2019-08-03
  • 3 回答
  • 0 关注
  • 442 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信