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。 这是简化的代码,但与真实代码完全相同。相同的流,确实传递相同类型的数据。
问题在于,在真实脚本中,.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,)是元组?
答案 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