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 类型的数据。 这是经过蒸馏的代码,但与真实代码完全相同。相同的流程,传递的数据类型完全相同。
- “now”设置为列名称,每个索引的所有新值现在均为 1。
- 接下来,脚本迭代索引列表并打印类型。
问题是在真实的脚本中.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,) 是一个元组?
最佳答案
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
关于python - 尽管调用单个索引,Pandas .loc[] 方法仅返回 DataType 而不是 Series,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51407524/