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数据 . 这是蒸馏代码,但它与真实代码完全相同 . 相同的流量,相同的数据类型正在通过 .
-
'now'被设置为列名,每个索引的所有新值现在都是1 .
-
接下来,脚本通过index_list进行迭代并打印类型 .
问题是在真实脚本中.loc只返回DataFrame类型而不是Series . 我不明白为什么 . 我甚至试图手动输入.loc索引名称来检查我是否没有传递错误类型的数据 . 仍然返回DataFrame .
我100%不知道我可能做错了什么 .
也许你们有些人有想法?
EDIT
删除原始代码 .
我发现如果我调用print(df.loc [i] .iloc [0])它将返回列的Series数据 .
print(type(df.loc[i].iloc[0]))
将打印:
20:48:48 1
Name: (A,), dtype: int64
<class 'pandas.core.series.Series'>
为什么名称(A,)是一个元组?
1 回答
TLDR:在构建dfCoinMaster的索引时删除额外的括号 .
在工作代码中:
在非工作代码中:
您正在添加额外级别的列表嵌套,您可以在其中看到
线 . 您可以通过在测试中添加额外的括号来重现相同的行为:
但: