关于python:如何将pandas数据帧列或索引作为数组获取?

您所在的位置:网站首页 dataframe列索引获取 关于python:如何将pandas数据帧列或索引作为数组获取?

关于python:如何将pandas数据帧列或索引作为数组获取?

2023-04-10 03:42| 来源: 网络整理| 查看: 265

您知道如何将数据帧的索引或列作为numpy数组或python列表获取吗?

相关讨论 从V0.24 Onwards,EDOCX1(英文)0中可以看出,获得未经授权的数字的首选方法不会长久。See this answer. Also,related:turn pandas datframe to nupy array

要获得numpy数组,应使用values属性:

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

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

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

要获取索引列表,请调用tolist:

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

同样,对于柱。

可以使用df.index访问索引对象,然后使用df.index.tolist()在列表中获取值。类似地,您可以使用df['col'].tolist()进行系列。

相关讨论 它返回InstanceMethod而不是列表数组 @Vsreyas,df.index.values.tolist()怎么样? df.index.tolist()不返回实例方法。它返回一个索引列表。这是熊猫指数上定义的一种方法。虽然首先调用值是一种可能,但将作业委托给numpy并不是一种更正——只是一种替代方法。

如果您处理的是多索引数据帧,那么您可能只对提取多索引的一个名称的列感兴趣。你可以这样做

1df.index.get_level_values('name_sub_index')

当然,name_sub_index必须是FrozenListdf.index.names的元素。

电流从v0.24.0+,2019年开始。

反对你使用.values而赞成这些方法!

从v0.24.0开始,我们将有两种全新的、首选的方法从Index、Series和dataframe对象获得numpy数组:它们是to_numpy()和.array。关于用法,文档提到:

We haven’t removed or deprecated Series.values or DataFrame.values, but we highly recommend and using .array or .to_numpy() instead.

有关更多信息,请参阅v0.24.0发行说明的本节。

to_numpy()法

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

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

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

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

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

请注意,此函数也适用于数据帧(而.array不适用)。

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

12345678910pd.__version__ # '0.24.0rc1' # Setup. df = pd.DataFrame([[1, 2], [4, 5]], columns=['A', 'B'], index=['a', 'b']) df    A  B a  1  2 b  4  5 123456789df.index.array     # # ['a', 'b'] # Length: 2, dtype: object df['A'].array # # [1, 4] # Length: 2, dtype: int64

从这里可以得到一个使用list的列表:

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

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

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

关于返回的内容,文件提到,

For Series and Indexes backed by normal NumPy arrays, Series.array will return a new arrays.PandasArray, which is a thin (no-copy) wrapper around a numpy.ndarray. arrays.PandasArray isn’t especially useful on its own, but it does provide the same interface as any extension array defined in pandas or by a third-party library.

综上所述,.array将返回

支持索引/序列的现有ExtensionArray,或 如果有numpy数组支持该系列,则会在底层数组上创建一个新的ExtensionArray对象作为一个薄包装。

添加两种新方法的理由这些职能是根据两个Github问题GH19954和GH23623进行讨论后增加的。

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

[...] with .values it was unclear whether the returned value would be the actual array, some transformation of it, or one of pandas custom arrays (like Categorical). For example, with PeriodIndex, .values generates a new ndarray of period objects each time. [...]

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

最后,在当前版本中,.values不会被弃用,但我预计这在将来的某个时候可能会发生,因此我会敦促用户尽快迁移到新的API。

由于pandas v0.13,您也可以使用get_values:

1df.index.get_values() 相关讨论 这个和.值有区别吗?(我更新了版本信息,因为此函数出现在0.13.0文档中。) @安迪·海登:这不是一个区别吗?g e t-values是一种官方的方法,只获取当前值,而values(例如,在多索引上)可能返回删除了行或列的索引值? @Ezekielkruglick所以它总是一个副本?链接到文档是非常轻的,我不认为你会得到这样的重复(即使它们在mi中,它们也不会在.values中),看到一个演示这一点的示例会很好! @安迪:我想我看错了你的评论。你说得对,.values很好,.level给出了过时的值,get-values给出了当前值,正确地排除了删除的行/列。最初的github版本:github.com/pydata/pandas/issues/3686,但我刚刚检查过,它看起来像.values(当然!)以不同于我想象的方式放弃最新信息 @不,没有区别。get_values刚刚打电话给.values。输入的字符更多。

我把大熊猫dataframe改成list,然后用基本的list.index()。像这样:

12dd = list(zone[0]) #Where zone[0] is some specific column of the table idx = dd.index(filename[i])

您的索引值为idx。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3