向熊猫数据框中添加新行的问题

克里斯·哈里斯

抱歉,如果这种格式很奇怪,这是我第一次发布任何内容。我已经在Python中创建了一个多索引数据框架,该框架工作正常:

arrays = [['one','one', 'two', 'two'],
          ['A','B','A','B']]
tuples = list(zip(*arrays))
mindex = pd.MultiIndex.from_tuples(tuples)
s = pd.DataFrame(data=np.random.randn(4), index=mindex, columns=(['Values']))
s

这个工作正常,除了我认为我应该能够通过简单地输入来添加新行

s['Values'].loc[('Three', 'A')] = 1
s['Values'].loc[('Three','B')]= 2

这不会返回任何错误消息,我可以通过输入以下命令来检查它是否起作用

s['Values'].loc[('Three', 'A')]

这给了我1.一切都如预期。但是,我看不到Jupyter笔记本中的“三”数据-如果只是键入

s

那么它只会显示原始的一,二,A和B行。这可能是因为新行不是索引:

s.index

退货

MultiIndex(levels=[['one', 'two'], ['A', 'B']],
           labels=[[0, 0, 1, 1], [0, 1, 0, 1]])

有人可以给我提示一下这里发生了什么吗?我希望随后添加的行出现在索引中。我应该改用.append函数吗?似乎有点麻烦,其他帖子建议使用上述.loc方法添加行。

谢谢!

耶斯列尔

我相信您需要在功能中选择列DataFrame.loc

s.loc[('Three', 'A'), 'Values'] = 1
s.loc[('Three', 'B'), 'Values'] = 2
print (s)
           Values
one   A -0.808372
      B  0.904552
two   A -0.443619
      B  1.157234
Three A  1.000000
      B  2.000000

print (s.index)

MultiIndex(levels=[['one', 'two', 'Three'], ['A', 'B']],
           labels=[[0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1]])

因为您的解决方案会将值添加到列(Series),但不会添加到DataFrame

s['Values'].loc[('Three', 'A')] = 1

print (s['Values'])
one    A   -0.808372
       B    0.904552
two    A   -0.443619
       B    1.157234
Three  A    1.000000
Name: Values, dtype: float64

print (s)
         Values
one A -0.808372
    B  0.904552
two A -0.443619
    B  1.157234

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章