python-3.x - 使用 .iloc 打印带有熊猫数据框的特定列时遇到问题
问题描述
我正在使用 pandas 创建一个 4x4 数据框,并尝试使用所有行数据打印最后 2 列,print(df.iloc[:][2:])
但它正在打印最后两行和所有列 - 与print(df.iloc[2:][:])
. 我是否误解了控制台如何解释括号和冒号?
这是我正在执行的代码:
import pandas as pd
import numpy as np
data1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12],
[13, 14, 15, 16]])
index = ['Worst', 'Index', 'Ever', 'Dude']
columns = ['Best', 'Columns', 'Today', 'Bro']
sick_df = pd.DataFrame(data = data1, index = index, columns = columns)
print(sick_df)
print('\n', sick_df.iloc[:][2:])
以下是上述代码的输出:
Best Columns Today Bro
Worst 1 2 3 4
Index 5 6 7 8
Ever 9 10 11 12
Dude 13 14 15 16
Best Columns Today Bro
Ever 9 10 11 12
Dude 13 14 15 16
我期待第二种打印方法显示最后两列的所有四行。这个输出是我期望得到的print('\n', sick_df.iloc[2:][:])
,事实上,当我将第二个打印方法更改为这一行时,我得到了完全相同的输出。
解决方案
iloc 和 loc 的正确语法是 [row index, col index]
sick_df.iloc[:, -2:]
您的代码返回不同结果的原因是由于链接,
sick_df.iloc[:]
返回整个数据框。现在,当您将其与
sick_df.iloc[:][2:]
您从索引 2 到数据框末尾获取所有行。
推荐阅读
- firebase - Webpack 和 Firebase
- c++ - 为 Eigen 中的稀疏矩阵运算预分配内存
- excel - 使用变量作为范围名称
- android - Firebase 通知未在前台显示
- javascript - Css 过渡和 setTimeout
- .net - 为什么或如何参数化查询防止 SQL 注入?
- spring-security - 验证您的 springboot 应用程序的最佳方法是什么?
- java - Java 说没有 main 方法,即使我定义了它
- php - 命名空间没有注册路径 [Symfony 4.3]
- c++ - 如何在 gcc/clang 中的错误和警告之间添加换行符/边框