Pandas学习笔记
Pandas官方文档非常全面,但从希望快速上手使用的角度,过于全面,不过Pandas官方提供了Cheet Sheet,概要总结了Pandas的核心功能,相对于官方文档来说更加简明,不过缺点则是从刚上手使用的角度来说过于简明
于是本篇文章就围绕Cheet Sheet,增加相应的样例代码,从而在不丢失简明的基础上,逐步深入,从而能快速掌握Pandas,如果工作需要更高级的功能,再深入研究官方文档即可
创建DataFrames
通过指定每列数据构造
import pandas as pd
df = pd.DataFrame(
{
"a": [4, 5, 6],
"b": [7, 8, 9],
"c": [10, 11, 12]},
index=[1, 2, 3])
print(df)
a b c
1 4 7 10
2 5 8 11
3 6 9 12
可以简单理解为字典的键作为了列名,而idnex则作为了行号
通过指定每行数据构造
import pandas as pd
df = pd.DataFrame(
[[4, 7, 10],
[5, 8, 11],
[6, 9, 12]],
index=[1, 2, 3],
columns=['a', 'b', 'c'])
print(df)
a b c
1 4 7 10
2 5 8 11
3 6 9 12
对于双层列表(矩阵)形式的数据,通过columns参数指定列名
创建多层索引
import pandas as pd
df = pd.DataFrame(
{
"a": [4, 5, 6],
"b": [7, 8, 9],
"c": [10, 11, 12]},
index=pd.MultiIndex.from_tuples([('d', 1), ('d', 2), ('e', 2)],
names=['n', 'v']))
print(df)
a b c
n v
d 1 4 7 10
2 5 8 11
e 2 6 9 12
第一层索引名为n,包括d、e,第二层索引名为v,包括1、2
方法链
大多数Pandas方法的返回值还是DataFrame,于是可以通过链式调用的形式,增加代码的可读性
df = (pd.melt(df)
.rename(columns={
'variable': 'var', 'value': 'val'})
.query('val >= 200')
)
变形数据
宽格式转换为长格式
import pandas as pd
# 创建示例DataFrame
data = {
'Name': ['Alice', 'Bob', 'Cathy'],
'Math': [90, 85, 95],
'Physics': [88, 82, 90],
'Chemistry': [87, 80, 92]
}
df = pd.DataFrame(data)
# 使用melt函数将数据从宽格式转换为长格式
melted_df = df.melt(id_vars='Name', value_vars=['Math', 'Physics', 'Chemistry'], var_name='Subject', value_name='Score')
# 打印转换后的长格式数据
print(melted_df)
Name Subject Score
0 Alice Math 90
1 Bob Math 85
2 Cathy Math 95
3 Alice Physics 88
4 Bob Physics 82
5 Cathy Physics 90
6 Alice Chemistry 87
7 Bob Chemistry 80
8 Cathy Chemistry 92
长格式:典型的包括3列,每一行就代表某一行某一列对应的某个值,从而也可以将一张表的信息全部装下
长格式转换为宽格式
import pandas as pd
# 创建示例DataFrame
data = {
'Name': ['Alice', 'Bob', 'Cathy', 'Alice', 'Bob', 'Cathy', 'Alice', 'Bob', 'Cathy'],
'Subject': ['Math', 'Math', 'Math', 'Physics', 'Physics', 'Physics', 'Chemistry', 'Chemistry', 'Chemistry'],
'Score': [90, 85, 95, 88, 82, 90, 87, 80, 92]
}
df = pd.DataFrame(data)
# 使用pivot函数将数据从长格式转换为宽格式
pivot_df = df.pivot(index='Name', columns='Subject', values='Score').reset_index()
# 打印转换后的宽格式数据
print(pivot_df)
Subject Name Chemistry Math Physics
0 Alice 87 90 88
1 Bob 80 85 82
2 Cathy 92 95 90
宽格式:将一个东西的所有信息都放在一行上,和常规数据库的表类似
垂直拼接
import pandas as pd
# 创建两个示例DataFrame
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2'],
'C': ['C0', 'C1', 'C2']})
df2 = pd.DataFrame({
'A': ['A3', 'A4', 'A5'],
'B': ['B3', 'B4', 'B5'],
'C': ['C3', 'C4', 'C5']})
# 使用concat函数在垂直方向上合并这两个DataFrame
result = pd.concat([df1, df2])
# 打印合并结果
print(result)
A B C
0 A0 B0 C0
1 A1 B1 C1
2 A2 B2 C2
0 A3 B3 C3
1 A4 B4 C4
2 A5 B5 C5
水平拼接
import pandas as pd
# 创建两个示例DataFrame
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']})
df2 = pd.DataFrame({
'C': ['C0', 'C1', 'C2'],
'D': ['D0', 'D1', 'D2']})
# 使用concat函数在水平方向上合并这两个DataFrame
result = pd.concat([df1, df2], axis=1)
# 打印合并结果
print(result)
A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
根据某列进行排序
import pandas as pd
# 创建示例数据
data = {
'brand': ['Ford',