pandas - rename_axis 之后无法按预期工作 - 为什么?
pandas - rename_axis doesn't work as expected afterwards - why?
我正在阅读 pandas 文档(10 分钟到 pandas)并遇到了这个例子:
dates = pd.date_range('1/1/2000', periods=8)
df = pd.DataFrame(np.random.randn(8, 4),
index=dates, columns=['A', 'B', 'C', 'D'])
s = df['A']
s[dates[5]]
# Out[5]: -0.6736897080883706
这很合逻辑,但如果我自己尝试并在之后设置索引名称(示例如下),那么我无法 select 使用 s[dates[5]] 的数据。有人知道为什么吗?
例如
df = pd.read_csv("xyz.csv").head(100)
s = df['price'] # series with unnamed int index + price
s = s.rename_axis('indexName')
s[indexName[5]] # NameError: name 'indexName' is not defined
提前致谢!
编辑:s.index.name returns indexName,尽管没有使用 s[indexName[5]]
的调用
您混淆了索引名称和索引值。
在你的例子中,第一个代码块 运行s 因为 dates
是一个变量,所以当你调用 dates[5]
它实际上是 returns 来自dates
对象,它是数据框中的有效索引值。
在您自己的尝试中,您指的是切片内的 indexName
(即当您尝试 运行 s[indexName[5]]
时),但 indexName
不是环境中的变量,因此它会抛出错误。
对系列或数据框的部分进行子集化的正确方法是引用索引的实际值,而不是轴的名称。例如,如果您有如下系列:
s = pd.Series(range(5), index=list('abcde'))
那么索引中的值是 a
到 e
,因此要对该系列进行子集化,您可以使用:
s['b']
或:
s.loc['b']
另请注意,如果您更喜欢按位置而不是索引值访问元素,则可以使用 .iloc
方法。所以要获得第二个元素,你可以使用:
s.iloc[1] # locations 0 is the first element
希望它有助于澄清。我建议您继续学习一些介绍性的 pandas 教程,以建立基本的理解。
首先让我们理解这个例子:
df[index]
用于 select 具有 index.
的行
这是 s 数据框:
索引是日期。
dates[5]
等于 '2000-01-06',它是 s df 的第 5 行的索引。因此,结果是具有该索引的行。
在您的代码中:
indexName
未定义。所以,indexName[5]
不代表你的 df 的索引。
我正在阅读 pandas 文档(10 分钟到 pandas)并遇到了这个例子:
dates = pd.date_range('1/1/2000', periods=8)
df = pd.DataFrame(np.random.randn(8, 4),
index=dates, columns=['A', 'B', 'C', 'D'])
s = df['A']
s[dates[5]]
# Out[5]: -0.6736897080883706
这很合逻辑,但如果我自己尝试并在之后设置索引名称(示例如下),那么我无法 select 使用 s[dates[5]] 的数据。有人知道为什么吗?
例如
df = pd.read_csv("xyz.csv").head(100)
s = df['price'] # series with unnamed int index + price
s = s.rename_axis('indexName')
s[indexName[5]] # NameError: name 'indexName' is not defined
提前致谢!
编辑:s.index.name returns indexName,尽管没有使用 s[indexName[5]]
的调用您混淆了索引名称和索引值。
在你的例子中,第一个代码块 运行s 因为 dates
是一个变量,所以当你调用 dates[5]
它实际上是 returns 来自dates
对象,它是数据框中的有效索引值。
在您自己的尝试中,您指的是切片内的 indexName
(即当您尝试 运行 s[indexName[5]]
时),但 indexName
不是环境中的变量,因此它会抛出错误。
对系列或数据框的部分进行子集化的正确方法是引用索引的实际值,而不是轴的名称。例如,如果您有如下系列:
s = pd.Series(range(5), index=list('abcde'))
那么索引中的值是 a
到 e
,因此要对该系列进行子集化,您可以使用:
s['b']
或:
s.loc['b']
另请注意,如果您更喜欢按位置而不是索引值访问元素,则可以使用 .iloc
方法。所以要获得第二个元素,你可以使用:
s.iloc[1] # locations 0 is the first element
希望它有助于澄清。我建议您继续学习一些介绍性的 pandas 教程,以建立基本的理解。
首先让我们理解这个例子:
df[index]
用于 select 具有 index.
的行
这是 s 数据框:
索引是日期。
dates[5]
等于 '2000-01-06',它是 s df 的第 5 行的索引。因此,结果是具有该索引的行。
在您的代码中:
indexName
未定义。所以,indexName[5]
不代表你的 df 的索引。