Python Pandas基础
什么是Pandas?
Pandas是Python中用于数据分析和数据处理的核心库,它提供了高效的数据结构和数据分析工具。Pandas的名称来源于"Panel Data"(面板数据)和"Python Data Analysis"(Python数据分析)的组合。自2008年由Wes McKinney开发以来,它已经成为数据科学、机器学习以及数据分析工作中不可或缺的工具。
提示
Pandas擅长处理表格型数据(类似Excel电子表格)和时间序列数据,是数据清洗和预处理的强大工具。
安装Pandas
在开始使用Pandas之前,我们需要先安装它。使用pip命令可以轻松完成:
pip install pandas
安装完成后,我们可以在Python中导入Pandas库:
import pandas as pd
按照惯例,我 们常将pandas导入为pd以便于使用。
Pandas的核心数据结构
Pandas主要提供两种数据结构:
- Series - 一维标签数组
- DataFrame - 二维标签数据表格
Series
Series是带有标签的一维数组,可以存储各种数据类型(整数、字符串、浮点数、Python对象等)。
import pandas as pd
# 创建一个简单的Series
s = pd.Series([1, 3, 5, 7, 9])
print(s)
输出:
0 1
1 3
2 5
3 7
4 9
dtype: int64
我们可以为Series指定自定义索引:
s = pd.Series([1, 3, 5, 7, 9], index=['a', 'b', 'c', 'd', 'e'])
print(s)
输出:
a 1
b 3
c 5
d 7
e 9
dtype: int64
也可以使用字典创建Series:
d = {'a': 1, 'b': 3, 'c': 5}
s = pd.Series(d)
print(s)
输出:
a 1
b 3
c 5
dtype: int64
DataFrame
DataFrame是一个二维标签数据结构,有行和列,类似于Excel表格或SQL表。
# 创建一个简单的DataFrame
data = {
'Name': ['John', 'Anna', 'Peter', 'Linda'],
'Age': [28, 24, 35, 32],
'City': ['New York', 'Paris', 'Berlin', 'London']
}
df = pd.DataFrame(data)
print(df)
输出:
Name Age City
0 John 28 New York
1 Anna 24 Paris
2 Peter 35 Berlin
3 Linda 32 London
我们可以指定列的顺序:
df = pd.DataFrame(data, columns=['Name', 'City', 'Age'])
print(df)
输出:
Name City Age
0 John New York 28
1 Anna Paris 24
2 Peter Berlin 35
3 Linda London 32
基本数据操作
查看数据
Pandas提供了多种方法来查看DataFrame的内容:
# 查看前几行数据
print(df.head(2)) # 默认是5行
# 查看后几行数据
print(df.tail(2))
# 查看DataFrame的基本信息
print(df.info())
# 查看数据的统计摘要
print(df.describe())
输出(前两行):
Name City Age
0 John New York 28
1 Anna Paris 24
选择数据
Pandas提供了多种方式来选择DataFrame中的数据:
选择列
# 选择单列
print(df['Name'])
# 选择多列
print(df[['Name', 'Age']])
输出(选择单列):
0 John
1 Anna
2 Peter
3 Linda
Name: Name, dtype: object
基于位置选择数据(iloc)
# 选择第一行
print(df.iloc[0])
# 选择前两行和前两列
print(df.iloc[0:2, 0:2])
输出(第一行):
Name John
City New York
Age 28
Name: 0, dtype: object
基于标签选择数据(loc)
# 选择带有特定标签的行
print(df.loc[0:1, ['Name', 'City']])
输出:
Name City
0 John New York
1 Anna Paris
条件选择
# 选择年龄大于30的人
print(df[df['Age'] > 30])
输出:
Name City Age
2 Peter Berlin 35
3 Linda London 32
增加和删除数据
添加新列
# 添加新列
df['Salary'] = [75000, 65000, 90000, 85000]
print(df)
输出:
Name City Age Salary
0 John New York 28 75000
1 Anna Paris 24 65000
2 Peter Berlin 35 90000
3 Linda London 32 85000
删除列
# 删除列
df_new = df.drop('Salary', axis=1) # axis=1表示列
print(df_new)
输出:
Name City Age
0 John New York 28
1 Anna Paris 24
2 Peter Berlin 35
3 Linda London 32
数据清洗
处理缺失值
在实际数据中,经常会遇到缺失值。Pandas使用NaN(Not a Number)表示缺失值。
import numpy as np
# 创建包含缺失值的DataFrame
data = {
'Name': ['John', 'Anna', np.nan, 'Linda'],
'Age': [28, np.nan, 35, 32],
'City': ['New York', 'Paris', 'Berlin', np.nan]
}
df = pd.DataFrame(data)
print(df)
输出:
Name Age City
0 John 28.0 New York
1 Anna NaN Paris
2 NaN 35.0 Berlin
3 Linda 32.0 NaN
检测缺失值
# 检查缺失值
print(df.isnull())
# 统计每列缺失值的数量
print(df.isnull().sum())
输出(统计每列缺失值):
Name 1
Age 1
City 1
dtype: int64
填充缺失值
# 使用指定值填充缺失值
df_filled = df.fillna(value='Unknown')
print(df_filled)
# 使用前值填充缺失值
df_ffill = df.fillna(method='ffill')
print(df_ffill)
# 使用后值填充缺失值
df_bfill = df.fillna(method='bfill')
print(df_bfill)
输出(使用指定值填充):
Name Age City
0 John 28.0 New York
1 Anna Unknown Paris
2 Unknown 35.0 Berlin
3 Linda 32.0 Unknown
删除有缺失值的行或列
# 删除有缺失值的行
df_dropna_rows = df.dropna()
print(df_dropna_rows)
# 删除有缺失值的列
df_dropna_cols = df.dropna(axis=1)
print(df_dropna_cols)
输出(删除有缺失值的行):
Empty DataFrame
Columns: [Name, Age, City]
Index: []
数据转换
类型转换
# 将Age列转换为整数类型
df['Age'] = df['Age'].astype('int32', errors='ignore') # 忽略错误,因为有NaN
print(df.dtypes)
输出:
Name object
Age float64
City object
dtype: object
重命名列
# 重命名列
df_renamed = df.rename(columns={'Name': 'FullName', 'City': 'Location'})
print(df_renamed)
输出:
FullName Age Location
0 John 28.0 New York
1 Anna NaN Paris
2 NaN 35.0 Berlin
3 Linda 32.0 NaN
数据分析
排序
# 按Age列排序
df_sorted = df.sort_values('Age', ascending=False) # 降序排列
print(df_sorted)
输出:
Name Age City
2 NaN 35.0 Berlin
3 Linda 32.0 NaN
0 John 28.0 New York
1 Anna NaN Paris