当前位置: 首页 > 面试题库 >

向MultiIndex DataFrame / Series添加一行

游皓
2023-03-14
问题内容

我想知道是否有一种等效的方法将行添加到具有MultiIndex的Series或DataFrame中,就像使用单个索引一样,即使用.ix还是.loc?

我以为自然的方式就像

row_to_add = pd.MultiIndex.from_tuples()
df.ix[row_to_add] = my_row

但这会引发KeyError。我知道我可以使用.append(),但使用.ix []或.loc []会更整洁。

这里有个例子:

>>> df = pd.DataFrame({'Time': [dt.datetime(2013,2,3,9,0,1), dt.datetime(2013,2,3,9,0,1)], 'hsec': [1,25], 'vals': [45,46]})
>>> df
                 Time  hsec  vals
0 2013-02-03 09:00:01     1    45
1 2013-02-03 09:00:01    25    46

[2 rows x 3 columns]
>>> df.set_index(['Time','hsec'],inplace=True)
>>> ind = pd.MultiIndex.from_tuples([(dt.datetime(2013,2,3,9,0,2),0)],names=['Time','hsec'])
>>> df.ix[ind] = 5

Traceback (most recent call last):
  File "<pyshell#201>", line 1, in <module>
    df.ix[ind] = 5
  File "C:\Program Files\Python27\lib\site-packages\pandas\core\indexing.py", line 96, in __setitem__
    indexer = self._convert_to_indexer(key, is_setter=True)
  File "C:\Program Files\Python27\lib\site-packages\pandas\core\indexing.py", line 967, in _convert_to_indexer
    raise KeyError('%s not in index' % objarr[mask])
KeyError: "[(Timestamp('2013-02-03 09:00:02', tz=None), 0L)] not in index"

问题答案:

您必须指定一个元组才能使多索引工作(并且您必须完全指定所有轴,例如:必需)

In [26]: df.ix[(dt.datetime(2013,2,3,9,0,2),0),:] = 5

In [27]: df
Out[27]: 
                          vals
Time                hsec      
2013-02-03 09:00:01 1       45
                    25      46
2013-02-03 09:00:02 0        5

但是,更容易重新索引和/或合并/附加新数据框。通常设置(通过这种放大)仅在使用少量值的情况下才有意义。因为这样做会产生副本。



 类似资料:
  • 问题内容: 我了解pandas旨在加载完全填充的内容,但是我需要创建一个空的DataFrame然后逐行添加行。做这个的最好方式是什么 ? 我成功创建了一个空的DataFrame: 然后,我可以添加新行,并用以下字段填充字段: 它有效,但看起来很奇怪:(添加字符串值失败) 如何将新行添加到DataFrame(具有不同的列类型)? 问题答案:

  • 目标 了解如何手动编写访问器方法对的声明 学习使用或不使用参数调用方法的正确语法 了解嵌套的方法调用 访问器方法 您在上一节末看到的实际使用的 getter 和 setter 称为访问器方法。(快速复习:getter 是检索属性值的方法;setter 是修改该值的访问方法。)要封装一个类中来自其他对象的数据,可以将它的变量声明为 private,然后提供访问器方法。 访问器的命名严格遵守称为 Ja

  • 问题内容: 我们有一个简单的项目,我们从套接字读取数据,并希望用即将到来的数据填充表,但是我们找不到找到将行添加到尚未创建的对象的方法,只能在以下位置找到添加行的方法:表的创建时间。 是否可以向中动态添加行,或者有更好的替代对象来处理这种显示数据的方式? 编辑 :非常感谢您的回答。 他们三个看起来都很有前途,但是我只选择一个,我认为最好的就是纪尧姆的。 问题答案: 您应该创建一个自定义。A 实际上

  • 问题内容: 我正在寻找简单的代码,让我将以下html添加到我的zend表单中: 就是这样,它必须位于表单中我的“ method”元素上方,但仅此而已。对于这样一个简单的动作,我找不到任何不涉及我学习火箭科学的方法(即Zend Decorators)。 问题答案: 目前,我唯一想到的方法是向表单中添加一个虚拟元素,并删除所有带有除您在问题中指定的属性的“ HtmlTag”以外的装饰器。删除装饰器意味

  • 有人来解释为什么我有这个错误,怎么贴标签? 多谢!