如何返回pandas数据帧中元素的索引值

时间:2018-01-23 14:50:12

标签: python

我有一个针对特定股权的公司行为的数据框。它看起来像这样:

0             Declared Date       Ex-Date    Record Date
BAR_DATE                 
2018-01-17       2017-02-21    2017-08-09     2017-08-11
2018-01-16       2017-02-21    2017-05-10     2017-06-05

除了它有数百行,但这并不重要。我从其中一个列创建了索引“BAR_DATE”,这是0来自BAR_DATE之上。

我想要做的是能够引用数据帧的特定元素并返回索引值,或者BAR_DATE,我认为它会是这样的:

index_value = cacs.iloc[5, :].index.get_values()

除了index_value成为列名,而不是索引。现在,这可能源于对pandas数据帧中索引的理解不足,因此对于其他人来说,这可能或者可能不容易解决。

我查看过其他一些问题,包括this one,但它也会返回列值。

1 个答案:

答案 0 :(得分:2)

你的代码非常接近,但你只需要比你需要的更进一步。

# creates a slice of the dataframe where the row is at iloc 5 (row number 5) and where the slice includes all columns
slice_of_df = cacs.iloc[5, :]

# returns the index of the slice
# this will be an Index() object
index_of_slice = slice_of_df.index

从这里我们可以使用Index对象上的文档:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Index.html

# turns the index into a list of values in the index
index_list = index_of_slice.to_list()

# gets the first index value
first_value = index_list[0]

关于Index最重要的一点是它是一个自己的对象,因此如果我们想要一个索引以外的东西,我们需要将它改为我们期望使用的类型。这是文档可以提供巨大帮助的地方。

编辑:事实证明,在这种情况下,iloc返回一个Series对象,这就是解决方案返回错误值的原因。知道这一点,新的解决方案将是:

# creates a Series object from row 5 (technically the 6th row)
row_as_series = cacs.iloc[5, :]

# the name of a series relates to it's index
index_of_series = row_as_series.name

这将是单行索引的方法。您可以将前一种方法用于多行索引,其中返回值为DataFrame而不是Series

不幸的是,我不知道如何将Series强制转换为DataFrame单行切片,而不是显式转换:

row_as_df = DataFrame(cacs.iloc[5, :])

虽然这样可行,并且第一种方法很乐意接受并返回索引,但可能有一个原因是为什么Pandas没有为单行切片返回DataFrame所以我对此犹豫不决提供此解决方案。