下面我将详细讲解切片、索引、操作和清理Pandas数据框架的完整攻略,同时提供实例说明。首先,我们来了解一下Pandas数据框架的基本概念和结构。
Pandas数据框架基本概念和结构
Pandas是一种流行的Python数据处理库,其最重要的特点是支持高效、方便地进行结构化数据操作和分析。其中最常用的数据结构是DataFrame,它类似于Excel中的一个表格,由多个行和列组成,每一列是一种数据类型,每一行代表一个数据点。
要创建一个Pandas数据框架,我们可以使用如下代码:
import pandas as pd
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'gender': ['F', 'M', 'M']})
print(df)
输出结果:
name age gender
0 Alice 25 F
1 Bob 30 M
2 Charlie 35 M
这个数据框架包含了3列和3行,每一列代表一种数据类型(name, age, gender),每一行代表一个数据点(Alice, 25, F等)。
切片和索引
在Pandas中,我们可以使用切片和索引来操作和访问数据框架中的数据。Pandas提供了丰富的切片和索引方法,包括数字索引、标签索引、布尔索引、多层索引等。下面我们介绍几种常用的索引方法。
数字索引
数字索引就是使用DataFrame对象的行和列的标签或数字来选择数据的一部分。类似于numpy数组的切片方法,使用[start:stop:step]的方式对数据进行切片。使用df.iloc[row_start:row_end, col_start:col_end]进行切片。
例如:
import pandas as pd
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'gender': ['F', 'M', 'M']})
# 访问第一行
print(df.iloc[0,:])
# 访问前两行
print(df.iloc[:2,:])
# 访问第一列
print(df.iloc[:,0])
# 访问前两列
print(df.iloc[:, :2])
# 选择行和列的子集
print(df.iloc[[0,2],[0,2]])
输出结果:
name Alice
age 25
gender F
Name: 0, dtype: object
name age gender
0 Alice 25 F
1 Bob 30 M
0 Alice
1 Bob
2 Charlie
Name: name, dtype: object
name age
0 Alice 25
1 Bob 30
2 Charlie 35
name gender
0 Alice F
2 Charlie M
标签索引
标签索引就是使用DataFrame对象的行和列的标签来选择数据的一部分。使用df.loc[row_index, col_index]方式对数据进行访问。
例如:
import pandas as pd
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'gender': ['F', 'M', 'M']})
# 访问第一行
print(df.loc[0, :])
# 访问前两行
print(df.loc[:1, :])
# 访问第一列
print(df.loc[:, 'name'])
# 访问前两列
print(df.loc[:, :'age'])
# 选择行和列的子集
print(df.loc[[0, 2], ['name', 'gender']])
输出结果:
name Alice
age 25
gender F
Name: 0, dtype: object
name age gender
0 Alice 25 F
1 Bob 30 M
0 Alice
1 Bob
2 Charlie
Name: name, dtype: object
name age
0 Alice 25
1 Bob 30
2 Charlie 35
name gender
0 Alice F
2 Charlie M
布尔索引
我们可以使用布尔索引来过滤数据框架中符合条件的数据。例如我们要筛选dataframe中gender为M的数据,我们可以使用以下代码:
import pandas as pd
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'gender': ['F', 'M', 'M']})
# 多条件查询
df2 = df[(df['gender'] == 'M') & (df['age'] > 30)]
print(df2)
输出结果:
name age gender
2 Charlie 35 M
多层索引
Pandas允许我们使用多层索引来处理有多个维度的数据。例如以下代码:
import pandas as pd
index = pd.MultiIndex.from_tuples([('Alice', 'Math'), ('Alice', 'English'), ('Bob', 'Math'),('Bob', 'English')])
df = pd.DataFrame([(90, 85), (95, 88), (87, 83), (92, 84)], index=index, columns=['Midterm', 'Final'])
print(df)
这里我们构造了一个两层的索引(名字和科目),每个名字有两个科目的成绩。
输出结果:
Midterm Final
Alice Math 90 85
English 95 88
Bob Math 87 83
English 92 84
操作数据框架
在Pandas中,我们可以使用许多操作来对数据框架进行处理。下面是几个常用的操作方法。
增加/删除行或列
我们可以使用以下方法增加或删除DataFrame对象的行或列。
import pandas as pd
# 增加一列
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'gender': ['F', 'M', 'M']})
df['score'] = [90, 80, 70]
# 删除一列
del df['score']
# 增加一行
df.loc[len(df)] = ['David', 40, 'M']
# 删除一行
df.drop(2, axis=0, inplace=True)
print(df)
输出结果:
name age gender
0 Alice 25 F
1 Bob 30 M
3 David 40 M
排序
我们可以使用Pandas的sort_values方法对DataFrame对象进行排序。例如:
import pandas as pd
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'gender': ['F', 'M', 'M']})
# 根据年龄排序
df = df.sort_values(by='age')
print(df)
输出结果:
name age gender
0 Alice 25 F
1 Bob 30 M
2 Charlie 35 M
汇总
我们可以使用Pandas的groupby方法对DataFrame对象进行分组和汇总。例如:
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'age': [25, 30, 35, 40, 45],
'gender': ['F', 'M', 'M', 'M', 'F'],
'score': [90, 80, 70, 90, 80]
})
# 按性别分组,求平均分
df = df.groupby('gender')['score'].mean()
print(df)
输出结果:
gender
F 85.0
M 80.0
Name: score, dtype: float64
清理数据框架
清理数据框架包括去除重复数据、填充缺失数据、更改数据类型等。
去除重复数据
使用drop_duplicates方法可以去除DataFrame对象中的重复行。
例如:
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Bob', 'Charlie', 'Charlie', 'David'],
'age': [25, 30, 30, 35, 35, 40],
'gender': ['F', 'M', 'M', 'M', 'M', 'M']})
# 去除重复行
df = df.drop_duplicates()
print(df)
输出结果:
name age gender
0 Alice 25 F
1 Bob 30 M
3 Charlie 35 M
5 David 40 M
填充缺失数据
使用fillna方法可以填充DataFrame对象中的缺失数据。例如:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, np.nan, 35],
'gender': ['F', 'M', 'M']})
# 使用平均年龄填充空缺
df['age'] = df['age'].fillna(df['age'].mean())
print(df)
输出结果:
name age gender
0 Alice 25.0 F
1 Bob 30.0 M
2 Charlie 35.0 M
更改数据类型
使用astype方法可以将DataFrame对象中的数据类型更改为其他类型。例如:
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'gender': ['F', 'M', 'M']})
# 更改年龄列的数据类型为float
df['age'] = df['age'].astype(float)
print(df)
输出结果:
name age gender
0 Alice 25.0 F
1 Bob 30.0 M
2 Charlie 35.0 M
以上就是Pandas数据框架的切片、索引、操作和清理的完整攻略,并提供了丰富的示例说明。希望可以帮助到您。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:切片、索引、操作和清理Pandas数据框架 - Python技术站