pandas DataFrame的行、列索引与条件过滤

DataFrame的行、列索引

函数功能df.loc[val]根据

选择单行或多行df.iloc[where]根据

选择单行或多行df.loc[:,:]根据

选择多行多列[行,列],用法和numpy切片的区别见下文df.iloc[:,:]根据

选择多行多列[行,列] ,用法和numpy切片一致reindex方法通过标签选择行或列get_value, set_value根据行和列的标签设置单个值

import numpy as np
import pandas as pd
In [40]: data = pd.DataFrame(np.arange(16).reshape((4,4)))
In [41]: data
Out[41]:
    0   1   2   3
0   0   1   2   3
1   4   5   6   7
2   8   9  10  11
3  12  13  14  15

In [43]: data[2]
Out[43]:
0     2
1     6
2    10
3    14
Name: 2, dtype: int64
In [44]: data[[1,2]]
Out[44]:
    1   2
0   1   2
1   5   6
2   9  10
3  13  14

In [45]: data.loc[3]
Out[45]:
0    12
1    13
2    14
3    15
Name: 3, dtype: int64
In [46]: data.loc[[2,0]]
Out[46]:
   0  1   2   3
2  8  9  10  11
0  0  1   2   3

DataFrame的切片和numpy切片的区别:
(1)pd.loc[0:3] 选取出0 1 2 3 共四行;pd.iloc[0:3] 选取出0 1 2 共三行; np[0:3] 选取出0 1 2 共三行。

In [31]: data
Out[31]:
    0   1   2   3
0   0   1   2   3
1   4   5   6   7
2   8   9  10  11
3  12  13  14  15

In [32]: data[2:3]
Out[32]:
   0  1   2   3
2  8  9  10  11

In [33]: data.iloc[2:3]
Out[33]:
   0  1   2   3
2  8  9  10  11

In [34]: data.iloc[:,2:3]
Out[34]:
    2
0   2
1   6
2  10
3  14

In [35]: data.loc[2:3]
Out[35]:
    0   1   2   3
2   8   9  10  11
3  12  13  14  15

In [36]: data.loc[:,2:3]
Out[36]:
    2   3
0   2   3
1   6   7
2  10  11
3  14  15

(2)对于numpy数据,切片范围超过数据原有size会报错;但对于pandas数据,切片范围超过数据原有size则直接切到多少返回多少,没有就返回Empty DataFrame。

In [37]: data.iloc[:,3:5]
Out[37]:
    3
0   3
1   7
2  11
3  15

In [47]: data.iloc[:,5:10]
Out[47]:
Empty DataFrame
Columns: []
Index: [0, 1, 2, 3]

In [38]: data.iloc[5:10]
Out[38]:
Empty DataFrame
Columns: [0, 1, 2, 3]
Index: []

DataFrame的条件过滤

In [48]: data
Out[48]:
    0   1   2   3
0   0   1   2   3
1   4   5   6   7
2   8   9  10  11
3  12  13  14  15

In [49]: data[data[0]>2]
Out[49]:
    0   1   2   3
1   4   5   6   7
2   8   9  10  11
3  12  13  14  15

In [50]: data[(data[0]>2) & (data[2]<10)]
Out[50]:
   0  1  2  3
1  4  5  6  7

In [51]: data[data[1]>10]
Out[51]:
    0   1   2   3
3  12  13  14  15

In [52]: data[(data[1]>10) | (data[3]<5)]
Out[52]:
    0   1   2   3
0   0   1   2   3
3  12  13  14  15

Original: https://blog.csdn.net/qq_41034838/article/details/121246179
Author: 神shuo要有光
Title: pandas DataFrame的行、列索引与条件过滤

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/753141/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球