在Python中,pandas
是一个非常强大的数据处理库,广泛用于数据分析、数据清洗、数据处理等任务。它的核心数据结构有两个:Series
和 DataFrame
。
1. 安装 Pandas
首先,你需要安装 pandas
,如果你还没有安装,可以使用以下命令:
pip install pandas
2. 导入 pandas
在开始使用 pandas
之前,需要导入它:
import pandas as pd
3. Pandas的核心数据结构
Series
Series
是一维的标签化数组,可以存储任何数据类型(整数、字符串、浮动等)。
创建一个 Series
:
import pandas as pd
# 使用列表创建 Series
s = pd.Series([1, 2, 3, 4, 5])
print(s)
输出:
0 1
1 2
2 3
3 4
4 5
dtype: int64
你还可以为 Series
指定索引:
s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
print(s)
输出:
a 1
b 2
c 3
d 4
e 5
dtype: int64
DataFrame
DataFrame
是一个二维的标签化数据结构,它可以被认为是由多个 Series
组成的字典。每个 Series
共享一个共同的索引。
创建一个 DataFrame
:
import pandas as pd
# 使用字典创建 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [24, 27, 22, 32],
'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)
print(df)
输出:
Name Age City
0 Alice 24 New York
1 Bob 27 Los Angeles
2 Charlie 22 Chicago
3 David 32 Houston
你也可以指定索引:
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd'])
print(df)
输出:
Name Age City
a Alice 24 New York
b Bob 27 Los Angeles
c Charlie 22 Chicago
d David 32 Houston
4. 访问数据
访问 Series
你可以通过标签(索引)访问 Series
中的数据:
print(s['a']) # 1
你也可以使用 .iloc[]
按位置访问数据:
print(s.iloc[0]) # 1
访问 DataFrame
你可以通过列名访问 DataFrame
中的列:
print(df['Name'])
输出:
a Alice
b Bob
c Charlie
d David
Name: Name, dtype: object
如果你需要获取多列,可以传入一个列名列表:
print(df[['Name', 'Age']])
访问行,可以使用 .loc[]
或 .iloc[]
:
.loc[]
:根据标签访问行.iloc[]
:根据位置访问行
print(df.loc['a']) # 根据标签访问行
print(df.iloc[0]) # 根据位置访问行
5. 常见的 DataFrame 操作
查看前几行和后几行
print(df.head()) # 默认显示前 5 行
print(df.tail(2)) # 显示最后 2 行
获取 DataFrame 的形状(行数和列数)
print(df.shape) # 输出 (行数, 列数)
获取列名和索引
print(df.columns) # 获取列名
print(df.index) # 获取行索引
描述统计
print(df.describe()) # 获取数值列的统计信息
数据选择与过滤
你可以基于条件来选择数据:
# 选择年龄大于 25 的行
print(df[df['Age'] > 25])
6. 数据清洗和处理
在数据分析中,清洗和处理数据是非常重要的步骤。pandas
提供了丰富的工具来处理缺失值、重复数据、类型转换等。
处理缺失值
- 检查缺失值
你可以使用 .isnull()
或 .notnull()
来检查缺失值:
print(df.isnull()) # 检查每个值是否为缺失值
print(df.notnull()) # 检查每个值是否非缺失值
- 删除含有缺失值的行或列
# 删除含有任何缺失值的行
df_cleaned = df.dropna()
# 删除含有任何缺失值的列
df_cleaned = df.dropna(axis=1)
- 填充缺失值
# 使用特定值填充缺失值
df_filled = df.fillna(0) # 用 0 填充
# 使用前一个有效值填充缺失值
df_filled = df.fillna(method='ffill')
# 使用后一个有效值填充缺失值
df_filled = df.fillna(method='bfill')
处理重复数据
你可以使用 .duplicated()
和 .drop_duplicates()
来处理重复的数据。
- 检查重复数据
print(df.duplicated()) # 查看每行是否为重复行
- 删除重复数据
df_no_duplicates = df.drop_duplicates()
类型转换
你可以使用 astype()
来转换列的数据类型。例如:
df['Age'] = df['Age'].astype(float) # 将 'Age' 列转换为 float 类型
7. 数据合并和连接
在实际的数据处理中,常常需要将多个数据源合并在一起。pandas
提供了多种合并方式:
合并(merge)
merge()
函数用于根据某些列进行连接,类似 SQL 中的 JOIN
操作。
df1 = pd.DataFrame({
'ID': [1, 2, 3],
'Name': ['Alice', 'Bob', 'Charlie']
})
df2 = pd.DataFrame({
'ID': [2, 3, 4],
'Age': [27, 22, 32]
})
# 根据 'ID' 列进行合并
merged_df = pd.merge(df1, df2, on='ID', how='inner')
print(merged_df)
输出:
ID Name Age
0 2 Bob 27
1 3 Charlie 22
how
参数指定了连接的方式:
inner
:内连接,仅保留两边都存在的行。left
:左连接,保留左边数据集中的所有行。right
:右连接,保留右边数据集中的所有行。outer
:外连接,保留两个数据集中的所有行。
连接(concat)
concat()
函数用于沿着一个轴(行或列)连接多个 DataFrame
。
- 按行连接
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
df_concat = pd.concat([df1, df2], axis=0) # axis=0 表示按行连接
print(df_concat)
输出:
A B
0 1 3
1 2 4
0 5 7
1 6 8
- 按列连接
df_concat = pd.concat([df1, df2], axis=1) # axis=1 表示按列连接
print(df_concat)
输出:
A B A B
0 1 3 5 7
1 2 4 6 8
8. 分组操作(GroupBy)
分组操作是数据分析中的重要步骤,pandas
提供了 groupby()
函数来对数据进行分组操作。
继续从分组操作开始:
根据某一列分组并计算统计量
你可以使用 groupby()
来对数据进行分组,然后计算各组的统计量。
data = {
'City': ['New York', 'Los Angeles', 'New York', 'Houston', 'Chicago', 'Chicago'],
'Temperature': [21, 25, 19, 31, 12, 15],
'Humidity': [60, 65, 70, 55, 80, 75]
}
df = pd.DataFrame(data)
# 按照城市进行分组,计算温度和湿度的平均值
grouped = df.groupby('City').mean()
print(grouped)
输出:
Temperature Humidity
City
Chicago 13.5 77.5
Houston 31.0 55.0
Los Angeles 25.0 65.0
New York 20.0 65.0
你可以对多列进行聚合计算,使用 agg()
方法来指定不同列的聚合方式:
# 按照城市分组,计算温度的最大值,湿度的最小值
grouped = df.groupby('City').agg({
'Temperature': 'max', # 计算温度的最大值
'Humidity': 'min' # 计算湿度的最小值
})
print(grouped)
输出:
Temperature Humidity
City
Chicago 15 75
Houston 31 55
Los Angeles 25 65
New York 21 60
过滤分组数据
你还可以通过条件过滤分组后的数据。例如,只保留温度大于 20 的城市:
# 过滤出温度平均值大于 20 的城市
grouped = df.groupby('City').filter(lambda x: x['Temperature'].mean() > 20)
print(grouped)
输出:
City Temperature Humidity
1 Los Angeles 25 65
3 Houston 31 55
9. 数据透视表 (Pivot Tables)
数据透视表可以帮助你从原始数据中聚合并展示多维度的信息。
创建数据透视表
pandas
提供了 pivot_table()
方法来创建数据透视表。
# 创建数据透视表,按 'City' 和 'Month' 聚合温度的均值
data = {
'City': ['New York', 'New York', 'Los Angeles', 'Los Angeles', 'Chicago', 'Chicago'],
'Month': ['January', 'February', 'January', 'February', 'January', 'February'],
'Temperature': [30, 32, 75, 77, 20, 22],
'Humidity': [60, 58, 65, 62, 75, 70]
}
df = pd.DataFrame(data)
# 使用 pivot_table() 创建透视表
pivot = pd.pivot_table(df, values='Temperature', index='City', columns='Month', aggfunc='mean')
print(pivot)
输出:
Month January February
City
Chicago 20 22
Los Angeles 75 77
New York 30 32
你可以指定不同的聚合函数,例如计算温度的最大值、最小值等:
pivot = pd.pivot_table(df, values='Temperature', index='City', columns='Month', aggfunc='max')
print(pivot)
输出:
Month January February
City
Chicago 20 22
Los Angeles 75 77
New York 30 32
10. 时间序列处理
pandas
提供了强大的时间序列处理功能,适用于日期、时间的分析和操作。
创建时间序列
# 创建从 2025年1月1日到1月10日的日期范围
dates = pd.date_range('2025-01-01', periods=10)
print(dates)
输出:
DatetimeIndex(['2025-01-01', '2025-01-02', '2025-01-03', '2025-01-04', '2025-01-05',
'2025-01-06', '2025-01-07', '2025-01-08', '2025-01-09', '2025-01-10'],
dtype='datetime64[ns]', freq='D')
你可以通过 freq
参数指定日期的频率,如每日 ('D'
)、每周 ('W'
)、每月 ('M'
)、每小时 ('H'
) 等。
将日期列转换为 datetime
类型
pandas
允许你将字符串转换为 datetime
类型,方便进行时间操作。使用 pd.to_datetime()
来实现转换:
df = pd.DataFrame({
'Date': ['2025-01-01', '2025-01-02', '2025-01-03', '2025-01-04'],
'Temperature': [30, 31, 32, 33]
})
df['Date'] = pd.to_datetime(df['Date'])
print(df)
输出:
Date Temperature
0 2025-01-01 30
1 2025-01-02 31
2 2025-01-03 32
3 2025-01-04 33
提取日期信息
你可以从 datetime
类型的列中提取出年、月、日、小时、分钟等信息:
# 提取年份、月份和日期
df['Year'] = df['Date'].dt.year
df['Month'] = df['Date'].dt.month
df['Day'] = df['Date'].dt.day
print(df)
输出:
Date Temperature Year Month Day
0 2025-01-01 30 2025 1 1
1 2025-01-02 31 2025 1 2
2 2025-01-03 32 2025 1 3
3 2025-01-04 33 2025 1 4
时间偏移
pandas
支持通过 timedelta
对时间进行加减操作。例如,获取日期加上一天或减去一周:
# 给每个日期加上一天
df['Next Day'] = df['Date'] + pd.Timedelta(days=1)
print(df)
输出:
Date Temperature Year Month Day Next Day
0 2025-01-01 30 2025 1 1 2025-01-02
1 2025-01-02 31 2025 1 2 2025-01-03
2 2025-01-03 32 2025 1 3 2025-01-04
3 2025-01-04 33 2025 1 4 2025-01-05
基础使用先说到这里哦,欢迎关注留言一起学习。