首页 文章

尽管调用单个索引,Pandas .loc []方法仅返回DataType而不返回Series

提问于
浏览
1

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 回答

  • 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
    

相关问题