loc[]方法只返回DataType not Series,尽管调用了单个索引

2024-04-26 17:28:46 发布

您现在位置:Python中文网/ 问答频道 /正文

TL;DR:.loc[]始终返回数据帧类型。即使在指定单个索引时也是如此。在

我什么都试过了。这让我发疯了。在

我似乎无法在其他地方复制它。在

我已经检查了所有通过的数据。一切都是顺其自然的。但是不管我将什么传入.loc[]它都将返回一个DataFrame而不是series。在

import numpy as np
import pandas as pd
import datetime


index_list = 'A B C D E F G H'.split()
df = pd.DataFrame(data=None,index=index_list)

k = 0
while k <= 2:
    now = datetime.datetime.now().strftime('%H:%M:%S')
    df.loc[:,now] = 1

    for i in index_list:
        print(df.loc[i])
        print(type(df.loc[i]))
    k += 1

上面的代码将以0个错误运行,并返回系列数据类型。 这是经过提炼的代码,但它和真实的代码完全一样。同样的流程,例如相同类型的数据正在传递。在

  1. “now”被设置为列名,每个索引的所有新值现在都是1。在
  2. 接下来,脚本通过索引_列表迭代并打印类型。在

问题是在真正的脚本中.loc只返回DataFrame类型而不是Series。我不知道为什么。我甚至尝试手动输入.loc索引名来检查是否传递了错误类型的数据。仍然返回数据帧。在

我完全不知道我会做错什么。在

也许你们有些人有想法?在

编辑

删除了原始代码。在

我发现如果我打电话 打印(航向位置[i] .iloc[0]) 它将返回列的序列数据。在

^{pr2}$

将打印:

20:48:48    1
Name: (A,), dtype: int64
<class 'pandas.core.series.Series'>

为什么名字(A,)是元组?在


Tags: 数据代码import类型dataframepandasdfdatetime
1条回答
网友
1楼 · 发布于 2024-04-26 17:28:46

TLDR:在构建dfCoinMaster索引时删除多余的括号。在

在工作守则中:

df = pd.DataFrame(data=None,index=index_list)

在非工作代码中:

^{pr2}$

您添加了一个额外级别的列表嵌套,可以在

^{3}$

行。您可以通过在测试中添加额外的括号来重现相同的行为:

In [28]: df = pd.DataFrame(data=None, index=[index_list])

In [29]: df.loc[:, 'test'] = 10

In [30]: df
Out[30]: 
   test
A    10
B    10
C    10
D    10
E    10
F    10
G    10
H    10

In [31]: df.loc['A']
Out[31]: 
   test
A    10

In [32]: type(_)
Out[32]: pandas.core.frame.DataFrame

但是:

In [33]: df.loc[('A',)]
Out[33]: 
test    10
Name: (A,), dtype: int64

In [34]: type(_)
Out[34]: pandas.core.series.Series

相关问题 更多 >