pandas的DataFrame的行列选择
Posted liangzaikaituozhe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas的DataFrame的行列选择相关的知识,希望对你有一定的参考价值。
Pandas可根据列名称选取,还可以根据列所在的position(数字,在第几行第几列,注意pandas行列的position是从0开始)选取。相关函数如下:
1)loc,基于列label,可选取特定行(根据行index);
2)iloc,基于行/列的position;
3)at,根据指定行index及列label,快速定位DataFrame的元素;
4)iat,与at类似,不同的是根据position来定位的;
5)ix,为loc与iloc的混合体,既支持label也支持position;
The simplified rules of indexing are
- Use
loc
for label-based indexing - Use
iloc
for positional indexing
-
# -*- coding:utf-8 -*-
-
import pandas as pd
-
-
df = pd.read_csv(‘./iris_training.csv‘, low_memory=False)
-
print(df.head(10))
-
"""
-
120 4 setosa versicolor virginica
-
0 6.4 2.8 5.6 2.2 2
-
1 5.0 2.3 3.3 1.0 1
-
2 4.9 2.5 4.5 1.7 2
-
3 4.9 3.1 1.5 0.1 0
-
4 5.7 3.8 1.7 0.3 0
-
5 4.4 3.2 1.3 0.2 0
-
6 5.4 3.4 1.5 0.4 0
-
7 6.9 3.1 5.1 2.3 2
-
8 6.7 3.1 4.4 1.4 1
-
9 5.1 3.7 1.5 0.4 0"""
行选择
Pandas进行行选择一般有三种方法:
- 连续多行的选择用类似于python的列表切片
- loc通过行标签索引来确定行的
- iloc通过行号索引来确定行
-
# 第一种,使用类似于python的列表切片
-
print(df[0:5])
-
"""
-
120 4 setosa versicolor virginica
-
0 6.4 2.8 5.6 2.2 2
-
1 5.0 2.3 3.3 1.0 1
-
2 4.9 2.5 4.5 1.7 2
-
3 4.9 3.1 1.5 0.1 0
-
4 5.7 3.8 1.7 0.3 0 """
-
-
-
print(df[0:5:2])
-
"""
-
120 4 setosa versicolor virginica
-
0 6.4 2.8 5.6 2.2 2
-
2 4.9 2.5 4.5 1.7 2
-
4 5.7 3.8 1.7 0.3 0 """
-
# 第二种,按照指定的索引选择一行或多行,使用loc[]方法
-
# .loc可以不加列名,则是行选择
-
-
ser = df.loc[0]
-
print(ser)
-
"""
-
120 6.4
-
4 2.8
-
setosa 5.6
-
versicolor 2.2
-
virginica 2.0
-
Name: 0, dtype: float64 """
-
-
-
maser = df.loc[0:5] # 包括了5,它与第一种的列表索引最大的不同是包含了索引号为5的那一行数据
-
print(maser)
-
"""
-
120 4 setosa versicolor virginica
-
0 6.4 2.8 5.6 2.2 2
-
1 5.0 2.3 3.3 1.0 1
-
2 4.9 2.5 4.5 1.7 2
-
3 4.9 3.1 1.5 0.1 0
-
4 5.7 3.8 1.7 0.3 0
-
5 4.4 3.2 1.3 0.2 0 """
-
-
print(df.loc[0:5:2])
-
"""
-
120 4 setosa versicolor virginica
-
0 6.4 2.8 5.6 2.2 2
-
2 4.9 2.5 4.5 1.7 2
-
4 5.7 3.8 1.7 0.3 0 """
-
-
-
print(df.loc[[0, 5]])
-
""" 选择特定的行
-
120 4 setosa versicolor virginica
-
0 6.4 2.8 5.6 2.2 2
-
5 4.4 3.2 1.3 0.2 0 """
-
# 第三种,按照指定的位置选择一行多多行,使用iloc[]方法
-
# .iloc可以不加第几列,则是行选择
-
-
# 在上面的数据中,使用iloc[]和loc[]的效果是一样的,因为索引号都是从0开始并且连续不断
-
df2 = df.drop([1,2], axis=0)
-
print(df2.head(10))
-
"""
-
120 4 setosa versicolor virginica
-
0 6.4 2.8 5.6 2.2 2
-
3 4.9 3.1 1.5 0.1 0
-
4 5.7 3.8 1.7 0.3 0
-
5 4.4 3.2 1.3 0.2 0
-
6 5.4 3.4 1.5 0.4 0
-
7 6.9 3.1 5.1 2.3 2
-
8 6.7 3.1 4.4 1.4 1
-
9 5.1 3.7 1.5 0.4 0
-
10 5.2 2.7 3.9 1.4 1
-
11 6.9 3.1 4.9 1.5 1 """
-
-
print(df2.loc[[0, 1]])
-
"""
-
Passing list-likes to .loc or [] with any missing label will raise
-
KeyError in the future, you can use .reindex() as an alternative.
-
-
120 4 setosa versicolor virginica
-
0 6.4 2.8 5.6 2.2 2.0
-
1 NaN NaN NaN NaN NaN"""
-
-
print(df2.loc[0:5])
-
"""
-
120 4 setosa versicolor virginica
-
0 6.4 2.8 5.6 2.2 2
-
3 4.9 3.1 1.5 0.1 0
-
4 5.7 3.8 1.7 0.3 0
-
5 4.4 3.2 1.3 0.2 0 """
-
-
print(df2.iloc[[0, 1]])
-
"""
-
120 4 setosa versicolor virginica
-
0 6.4 2.8 5.6 2.2 2
-
3 4.9 3.1 1.5 0.1 0 """
列选择
-
# 通过列名选择单列
-
print(df[‘120‘])
-
"""
-
0 6.4
-
1 5.0
-
2 4.9
-
3 4.9
-
4 5.7
-
5 4.4
-
...
-
115 5.5
-
116 5.7
-
117 4.4
-
118 4.8
-
119 5.5
-
Name: 120, Length: 120, dtype: float64"""
-
-
# 通过列名选择多列
-
print(df[[‘120‘, ‘setosa‘]])
-
"""
-
120 setosa
-
0 6.4 5.6
-
1 5.0 3.3
-
2 4.9 4.5
-
3 4.9 1.5
-
4 5.7 1.7
-
5 4.4 1.3
-
.. ... ...
-
115 5.5 4.4
-
116 5.7 4.2
-
117 4.4 1.4
-
118 4.8 1.4
-
119 5.5 3.7
-
-
[120 rows x 2 columns] """
-
-
# 如果没有列名
-
# df[df.columns[0]]
行列选择
-
# print(df.loc[1:3, [2, 3]]) #.loc仅支持列名操作
-
# KeyError: ‘None of [[2, 3]] are in the [columns]‘
-
-
-
print(df.loc[1:3, [‘120‘, ‘setosa‘]])
-
"""
-
120 setosa
-
1 5.0 3.3
-
2 4.9 4.5
-
3 4.9 1.5 """
-
-
print(df.loc[1:3, ‘120‘: ‘setosa‘])
-
"""
-
120 4 setosa
-
1 5.0 2.3 3.3
-
2 4.9 2.5 4.5
-
3 4.9 3.1 1.5 """
-
-
print(df.iloc[1:3, [1, 2]])
-
"""
-
4 setosa
-
1 2.3 3.3
-
2 2.5 4.5 """
-
-
print(df.iloc[1:3, 1:3])
-
"""
-
4 setosa
-
1 2.3 3.3
-
2 2.5 4.5 """
总结
1).loc,.iloc,.ix,只加第一个参数如.loc([1,2]),.iloc([2:3]),.ix[2]…则进行的是行选择
2).loc,.at,选列是只能是列名,不能是position
3).iloc,.iat,选列是只能是position,不能是列名
4)df[]只能进行行选择,或列选择,不能同时进行列选择,列选择只能是列名。
以上是关于pandas的DataFrame的行列选择的主要内容,如果未能解决你的问题,请参考以下文章
Python学习解决pandas中打印DataFrame行列显示不全的问题
python:pandas之DataFrame取行列(df.loc(),df.iloc())以及索引
pandas使用iloc函数基于行列索引获取dataframe指定行和指定列交叉格子的数据内容loc函数基于行索引和列名称获取dataframe指定行和指定列交叉格子的数据内容