python – 以字符串元组作为索引的Pandas DataFrame
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 以字符串元组作为索引的Pandas DataFrame,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1712字,纯文字阅读大概需要3分钟。
内容图文
我在这里感觉到一些奇怪的熊猫行为.我有一个看起来像的数据框
df = pd.DataFrame(columns=['Col 1', 'Col 2', 'Col 3'],
index=[('1', 'a'), ('2', 'a'), ('1', 'b'), ('2', 'b')])
In [14]: df
Out[14]:
Col 1 Col 2 Col 3
(1, a) NaN NaN NaN
(2, a) NaN NaN NaN
(1, b) NaN NaN NaN
(2, b) NaN NaN NaN
我可以设置任意元素的值
In [15]: df['Col 2'].loc[('1', 'b')] = 6
In [16]: df
Out[16]:
Col 1 Col 2 Col 3
(1, a) NaN NaN NaN
(2, a) NaN NaN NaN
(1, b) NaN 6 NaN
(2, b) NaN NaN NaN
但是当我使用相同的语法引用我刚设置的元素时,我得到了
In [17]: df['Col 2'].loc[('1', 'b')]
KeyError: 'the label [1] is not in the [index]'
有人能告诉我我做错了什么或为什么会出现这种情况?我根本不允许将索引设置为多元素元组吗?
编辑
显然,将元组索引包装在列表中是有效的.
In [38]: df['Col 2'].loc[[('1', 'b')]]
Out[38]:
(1, b) 6
Name: Col 2, dtype: object
虽然我在实际使用案例中仍然有一些奇怪的行为,所以很高兴知道这不是推荐用法.
解决方法:
选择括号中的元组被视为包含要检索的元素的序列.这就像你将[‘1′,’b’]作为参数传递一样.因此KeyError消息:pandas试图找到键’1′,显然没有找到它.
这就是为什么它在你添加额外的括号时起作用,因为现在参数变成了一个元素的序列 – 你的元组.
你应该避免在选择中处理list和tuple参数周围的歧义.根据索引是简单索引还是多索引,行为也可以不同.
在任何情况下,如果你在这里询问推荐,我看到的是你应该尝试不构建由元组构成的简单索引:如果你实际构建一个多索引,pandas会更好用,并且会更强大:
df = pd.DataFrame(columns=['Col 1', 'Col 2', 'Col 3'],
index=pd.MultiIndex.from_tuples([('1', 'a'), ('2', 'a'), ('1', 'b'), ('2', 'b')]))
df['Col 2'].loc[('1', 'b')] = 6
df['Col 2'].loc[('1', 'b')]
Out[13]: 6
df
Out[14]:
Col 1 Col 2 Col 3
1 a NaN NaN NaN
2 a NaN NaN NaN
1 b NaN 6 NaN
2 b NaN NaN NaN
内容总结
以上是互联网集市为您收集整理的python – 以字符串元组作为索引的Pandas DataFrame全部内容,希望文章能够帮你解决python – 以字符串元组作为索引的Pandas DataFrame所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。