尽管调用单个索引

时间:2018-07-18 17:08:26

标签: python pandas

TL; DR:.loc []始终返回DataFrame类型。即使指定单个索引。

我已经尝试了一切。这让我发疯。

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

我检查了正在传递的每种数据类型。一切都应有。但是,无论我传递给.loc []什么,它都会返回一个非序列的DataFrame。

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错误运行,并返回数据的Series Type。 这是简化的代码,但与真实代码完全相同。相同的流,确实传递相同类型的数据。

  1. 'now'被设置为列名,并且每个索引的所有新值现在为1。
  2. 接下来,脚本会遍历index_list并打印类型。

问题在于,在真实脚本中,.loc将仅返回DataFrame类型,而不返回Series。而且我不知道为什么。我什至尝试手动输入.loc索引名称,以检查是否传递了错误的数据类型。仍返回DataFrame。

我100%不知道自己可能做错了什么。

也许有些人有想法?

编辑

已删除原始代码。

我发现如果我打电话     打印(df.loc [i] .iloc [0]) 它将返回该列的系列数据。

print(type(df.loc[i].iloc[0]))

将打印:

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

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

1 个答案:

答案 0 :(得分:1)

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

在工作代码中:

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

在无效代码中:

dfCoinMaster = pd.DataFrame(data=None,index=[current_coin_listings])

您要添加一个更高级别的列表嵌套,可以在您的

中看到
Name: (A,), dtype: int64

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

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