【问题标题】:use tuple as index in pandas Series在熊猫系列中使用元组作为索引
【发布时间】:2018-04-09 16:50:20
【问题描述】:

我有一个非常简单的任务。本质上,我想创建一个熊猫系列并使用元组值作为索引。例如,

series_tmp = pd.Series()
series_tmp[(0,'a')] = 1

我想做的是,我想在 pd.Series 中再创建一行,其索引为 (0,'a'),其值为 1。

上面的代码得到错误:

KeyError: '[0 1] not in index'

有什么帮助吗?

我知道多索引,但它对我的情况没有帮助。因为我需要有非常复杂的元组,例如 ('a',(2,'c'),'d') 作为键。

结论:感谢所有精彩的回答!要添加以元组为索引的行,我们应该这样做:

series_tmp = series_tmp.append(pd.Series([1],index=[(0,'a')]))

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    如果您要从数据创建具有多索引的系列对象,您可以通过构造一个以元组作为键、数据作为值的字典来实现。然后将其传递给系列构造函数。

    import pandas as pd
    
    d = {(0,'a'):1, (0,'b'):1.5, (1,'a'):3, (1,'b'):3.5}
    s = pd.Series(d)
    s
    # returns:
    0  a    1.0
       b    1.5
    1  a    3.0
       b    3.5
    dtype: float64
    

    基于 cmets 编辑:

    对于这种情况,需要显式元组的索引。在这种情况下,您可以提前构建索引,然后在构建系列时将其用作index 参数。

    ix = pd.Index([(1,'a'), ('a',(2,'b')), (2,('b',1))])
    s = pd.Series(data=[1,5,9], index=ix)
    s
    # returns:
    (1, a)         1
    (a, (2, b))    5
    (2, (b, 1))    9
    dtype: int64
    
    # check indexing into the series object
    s[('a',(2,'b'))]
    # returns:
    5
    

    【讨论】:

    • 我知道多索引,但是在我的应用程序中,我需要在一个单元格中使用一个实际的元组......因为我会有非常复杂的元组,比如 ('a',(2,'b ')) 作为键......
    • 所以你需要一个带有显式元组的索引?
    • 谢谢!在这种情况下,添加元素的最佳方法是将 append 与新的 pd.Series 一起使用?
    【解决方案2】:

    试试这样:

    df = pd.DataFrame(columns=['a', 'b'], index=pd.MultiIndex.from_tuples([('0', 'a'), ('1', 'b')]))
    
    print(df)
    

    输出:

           a    b
    0 a  NaN  NaN
    1 b  NaN  NaN
    

    【讨论】:

    • 我知道多索引,但是在我的应用程序中,我需要在一个单元格中使用一个实际的元组......因为我会有非常复杂的元组,比如 ('a',(2,'b ')) 作为键......
    【解决方案3】:
    In :series_tmp = pd.Series([5,6],index=[(0,'a'),(1,'b')])
        series_tmp
    Out:(0, a)    5
        (1, b)    6
        dtype: int64
    

    【讨论】:

      猜你喜欢
      • 2017-03-06
      • 2013-08-22
      • 2016-11-22
      • 2014-10-11
      • 1970-01-01
      • 2016-11-27
      相关资源
      最近更新 更多