import pandas as pd
import numpy as np
data = pd.DataFrame(np.arange(1,10).reshape(3,3),index=['r1','r2','r3'],columns= ['c1','c2','c3'])
print(data)
c1 c2 c3
r1 1 2 3
r2 4 5 6
r3 7 8 9
#按列选取数据
a = data['c1']
print(a)
r1 1
r2 4
r3 7
b = data['c1']
print(b)
r1 1
r2 4
r3 7
c = data[['c1','c3']]
print(c)
c1 c3
r1 1 3
r2 4 6
r3 7 9
#按行选取数据
a = data[1:3] #选取第2-3行,序号从0开始
print(a)
c1 c2 c3
r2 4 5 6
r3 7 8 9
b = data.iloc[1:3]
print(b)
c1 c2 c3
r2 4 5 6
r3 7 8 9
c = data.iloc[-1]#选取单行,必须用iloc方法
print(c)
r3 7 8 9
d = data.loc[['r2','r3']]#根据行的名称来选择数据
print(d)
e = data.head()#用来选取前几行的数据
print(e)
c1 c2 c3
r1 1 2 3
r2 4 5 6
r3 7 8 9
#按区块选取数据
a = data[0:2][['c1','c3']]
print(a)
b = data.iloc[0:2][['c1','c3']]
print(b)
c = data.iloc[0]['c3']
print(c)
d = data.iloc[0:2,[0,2]]
print(d)
#数据的筛选
a = data[data['c1'] > 1]
print(a)
b = data[(data['c1'] > 1) & (data['c2'] == 5)]
print(b)
c = data[(data['c1'] > 1) | (data['c2'] == 5)]
print(c)
#数据的排序
a = data.sort_values(by= 'c2',ascending= False)
print(a)
b = b.sort_index()
print(b)
这段代码展示了 Pandas DataFrame 的数据选择、筛选和排序操作,下面是详细解释:
数据准备
python
运行
import pandas as pd
import numpy as np
解释一下上面这段代码的作用和工作原理:
data = pd.DataFrame(
np.arange(1, 10).reshape(3, 3), # 生成1~9的3×3矩阵
index=['r1', 'r2', 'r3'], # 行索引
columns=['c1', 'c2', 'c3'] # 列索引
)
数据结构:
plaintext
c1 c2 c3
r1 1 2 3
r2 4 5 6
r3 7 8 9
一、按列选取数据
1. 选取单列(返回 Series)
python
运行
a = data['c1'] # 选取 'c1' 列
结果:
plaintext
r1 1
r2 4
r3 7
Name: c1, dtype: int64
2. 选取多列(返回 DataFrame)
python
运行
c = data[['c1', 'c3']] # 选取 'c1' 和 'c3' 列
结果:
plaintext
c1 c3
r1 1 3
r2 4 6
r3 7 9
二、按行选取数据
1. 切片(通过索引位置)
python
运行
a = data[1:3] # 选取第2行和第3行(索引从0开始)
结果:
plaintext
c1 c2 c3
r2 4 5 6
r3 7 8 9
2. iloc(通过整数位置)
python
运行
b = data.iloc[1:3] # 同上
c = data.iloc[-1] # 选取最后一行(返回 Series)
c 的结果:
plaintext
c1 7
c2 8
c3 9
Name: r3, dtype: int64
3. loc(通过索引标签)
python
运行
d = data.loc[['r2', 'r3']] # 选取 'r2' 和 'r3' 行
结果:
plaintext
c1 c2 c3
r2 4 5 6
r3 7 8 9
4. head()(选取前 N 行)
python
运行
e = data.head() # 默认取前5行(本例只有3行,返回全量数据)
三、按区块选取数据
1. 组合切片(先选行,再选列)
python
运行
a = data[0:2][['c1', 'c3']] # 选前2行的 'c1' 和 'c3' 列
结果:
plaintext
c1 c3
r1 1 3
r2 4 6
2. iloc 组合(行和列同时切片)
python
运行
d = data.iloc[0:2, [0, 2]] # 同上,但更高效
3. 定位单个元素
python
运行
c = data.iloc[0]['c3'] # 选取第1行的 'c3' 列(值为3)
四、数据筛选
1. 单列条件
python
运行
a = data[data['c1'] > 1] # 筛选 'c1' 大于1的行
结果:
plaintext
c1 c2 c3
r2 4 5 6
r3 7 8 9
2. 多条件组合(逻辑与 &)
python
运行
b = data[(data['c1'] > 1) & (data['c2'] == 5)] # 筛选 'c1>1' 且 'c2=5' 的行
结果:
plaintext
c1 c2 c3
r2 4 5 6
3. 多条件组合(逻辑或 |)
python
运行
c = data[(data['c1'] > 1) | (data['c2'] == 5)] # 筛选 'c1>1' 或 'c2=5' 的行
结果:
plaintext
c1 c2 c3
r2 4 5 6
r3 7 8 9
五、数据排序
1. 按列值排序
python
运行
a = data.sort_values(by='c2', ascending=False) # 按 'c2' 列降序排序
结果:
plaintext
c1 c2 c3
r3 7 8 9
r2 4 5 6
r1 1 2 3
2. 按索引排序
python
运行
b = b.sort_index() # 按行索引升序排序(注:这里的b是前面筛选的结果)
核心知识点总结
数据选择:
列选择:df['col'] 或 df[['col1', 'col2']]
行选择:df[start:end]、df.iloc[]、df.loc[]
区块选择:组合行和列的选择器
筛选逻辑:
条件用括号包裹:(cond1) & (cond2)
逻辑运算符:&(与)、|(或)、~(非)
排序方法:
值排序:sort_values(by='col', ascending=False)
索引排序:sort_index()