python - 为什么 Pandas 列切片会根据列命名给出不同的结果?
问题描述
在执行数据帧合并时遇到内存错误后,我发现 pandas 列切片中的一个相当奇特的行为。下面是观察到的行为示例。数据框是相同的,除了被重命名的列而df4
不是df3
.
但是,当对帧进行列切片时,对于其中一个,数字列是重复的,而对于另一个,切片的行为符合预期。
这里有任何熊猫向导以前经历过这种情况吗?如果是这样,是否有任何触发行为的方法,所以可以完全避免。
df3
Out[1138]:
A B C D
Date
2017-03-31 NaN NaN 2.9511 2.9511
2017-03-30 NaN NaN 2.9009 2.9009
2017-03-29 NaN NaN 2.9356 2.9356
2017-03-28 NaN NaN 2.9008 2.9008
2017-03-27 NaN NaN 2.8576 2.8576
df4
Out[1139]:
Feb16 Mar16 Mar17 Mar17
Date
2017-03-31 NaN NaN 2.9511 2.9511
2017-03-30 NaN NaN 2.9009 2.9009
2017-03-29 NaN NaN 2.9356 2.9356
2017-03-28 NaN NaN 2.9008 2.9008
2017-03-27 NaN NaN 2.8576 2.8576
df3[df3.columns]
Out[1140]:
A B C D
Date
2017-03-31 NaN NaN 2.9511 2.9511
2017-03-30 NaN NaN 2.9009 2.9009
2017-03-29 NaN NaN 2.9356 2.9356
2017-03-28 NaN NaN 2.9008 2.9008
2017-03-27 NaN NaN 2.8576 2.8576
df4[df4.columns]
Out[1141]:
Feb16 Mar16 Mar17 Mar17 Mar17 Mar17
Date
2017-03-31 NaN NaN 2.9511 2.9511 2.9511 2.9511
2017-03-30 NaN NaN 2.9009 2.9009 2.9009 2.9009
2017-03-29 NaN NaN 2.9356 2.9356 2.9356 2.9356
2017-03-28 NaN NaN 2.9008 2.9008 2.9008 2.9008
2017-03-27 NaN NaN 2.8576 2.8576 2.8576 2.8576
解决方案
为什么我认为通过为多个列提供相同名称来引入此行为的示例:
创建示例 df
df = pd.DataFrame({x: np.random.random(2) for x in ['A1', 'A2']})
A1 A2
0 0.217047 0.224265
1 0.454130 0.304111
列索引按要求工作:
df[df.columns]
A1 A2
0 0.217047 0.224265
1 0.454130 0.304111
将列重命名为非唯一列表:
df.columns = df.columns.str[0]
A A
0 0.217047 0.224265
1 0.454130 0.304111
从问题帖子中复制错误:
df[df.columns]
A A A A
0 0.217047 0.224265 0.217047 0.224265
1 0.454130 0.304111 0.454130 0.304111
推荐阅读
- rust - Calling a function that returns Result<_,_> from a map method
- python - 如果对象名称是动态的,如何使用 Python 获取 Salesforce 对象的元数据?
- database - 如何使用引用 Laravel Eloquent 中另一个表的“id”的“x_id”列获取表的列(例如 x)?
- javascript - 如何理解 YDKJS Promise.observe 片段
- python - 以对数刻度将 x 和 y 轴与 twinx twiny 对齐
- angular - Angular (mouseenter), (mouseleave) 根据屏幕大小禁用
- java - Javafx 形状错位
- android - 片段内的列表视图不会显示内容
- angular - InvalidCharacterError:无法在“Window”PDF 文件上执行“atob”
- python - pywinauto 无法最大化最小化的窗口应用程序