DataFrame
DataFrame
是 Pandas 库中最常用的数据结构之一,它类似于一个表格,包含行和列,可以看作是一个二维数组或数据库表。DataFrame
结构灵活,支持不同的数据类型,可以很方便地进行数据选择、清洗、处理和分析。
接下来,我会从最基本的操作开始,逐步讲解如何使用 Pandas 进行 DataFrame
的操作。
1. 创建 DataFrame
DataFrame
可以从多种数据结构创建,比如列表、字典、NumPy 数组等。
使用字典创建:
import pandas as pd
# 创建一个简单的字典
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
print(df)
输出:
Name Age City
0 Alice 25 New York
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
使用列表创建:
data = [['Alice', 25, 'New York'], ['Bob', 30, 'Los Angeles'], ['Charlie', 35, 'Chicago']]
df = pd.DataFrame(data, columns=['Name', 'Age', 'City'])
print(df)
输出与上面相同。
2. 查看数据
创建了 DataFrame
后,常常需要查看数据的基本信息。Pandas 提供了多个方法来快速检查数据的形态和内容。
查看前几行数据:
print(df.head()) # 默认显示前 5 行
查看后几行数据:
print(df.tail()) # 默认显示后 5 行
查看数据的基本信息:
print(df.info()) # 输出列的数据类型、非空值数量等信息
查看数据的统计信息:
print(df.describe()) # 统计数值型数据的基本统计信息
3. 选择数据
选择数据是 DataFrame
操作中最常见的任务,Pandas 提供了灵活的选择方法。
按列选择数据:
# 选择一列
print(df['Name'])
# 选择多列
print(df[['Name', 'Age']])
按行选择数据:
可以使用 .loc[]
和 .iloc[]
进行行选择。
.loc[]
:通过标签(index)来选择数据。.iloc[]
:通过整数位置来选择数据。
# 使用 loc 选择第一行
print(df.loc[0])
# 使用 iloc 选择第一行
print(df.iloc[0])
# 使用 iloc 选择前两行
print(df.iloc[:2])
条件选择:
你可以通过条件筛选数据行。
# 选择年龄大于 30 的人
print(df[df['Age'] > 30])
4. 数据清洗
数据清洗是数据分析中非常重要的一步。DataFrame
提供了许多方法来处理缺失值、重复值和格式问题。
处理缺失值:
-
检测缺失值:
print(df.isnull()) # 返回布尔值的 DataFrame,True 表示缺失值
-
填充缺失值:
df['Age'] = df['Age'].fillna(df['Age'].mean()) # 使用平均值填充缺失值
-
删除含有缺失值的行:
df = df.dropna() # 删除任何包含缺失值的行
处理重复值:
# 检查是否有重复的行
print(df.duplicated())
# 删除重复的行
df = df.drop_duplicates()
5. 修改数据
DataFrame
中的数据可以通过各种方式修改。
修改某一列:
df['Age'] = df['Age'] + 1 # 对 "Age" 列的所有值加 1
print(df)
修改某一行的数据:
df.loc[0, 'City'] = 'San Francisco' # 修改第 0 行的 "City" 列
print(df)
添加新列:
df['Salary'] = [50000, 60000, 70000]
print(df)
6. 排序数据
可以根据一个或多个列对 DataFrame
进行排序。
按某一列升序排序:
df = df.sort_values(by='Age') # 按 "Age" 列升序排序
print(df)
按多列排序:
df = df.sort_values(by=['City', 'Age'], ascending=[True, False]) # 先按 "City" 升序排序,再按 "Age" 降序排序
print(df)
7. 分组操作
groupby
是 Pandas 中一个非常强大的功能,它允许我们根据某一列或多列对数据进行分组,并对每个分组执行一些聚合操作。
基本的分组与聚合:
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie', 'Alice'],
'Age': [25, 30, 35, 26],
'City': ['New York', 'Los Angeles', 'Chicago', 'New York']
})
# 按城市分组,计算每个城市的平均年龄
grouped = df.groupby('City')['Age'].mean()
print(grouped)
多重聚合:
grouped = df.groupby('City').agg({
'Age': ['mean', 'max'], # 计算年龄的均值和最大值
'Name': 'count' # 计算每个城市中有多少人
})
print(grouped)
8. 合并与连接
在数据分析中,常常需要将多个 DataFrame
合并或连接。
合并:
pd.merge()
用于根据一个或多个键将两个 DataFrame
合并。
df1 = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Age': [25, 30]
})
df2 = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'City': ['New York', 'Los Angeles']
})
df_merged = pd.merge(df1, df2, on='Name')
print(df_merged)
拼接:
pd.concat()
用于按行或按列拼接多个 DataFrame
。
df1 = pd.DataFrame({'A': [1, 2]})
df2 = pd.DataFrame({'A': [3, 4]})
df_concat = pd.concat([df1, df2], axis=0) # 按行拼接
print(df_concat)
9. 透视表
透视表是一种非常强大的汇总数据的方式,类似于 Excel 中的透视表。
df = pd.DataFrame({
'City': ['New York', 'New York', 'Chicago', 'Chicago'],
'Year': [2020, 2021, 2020, 2021],
'Sales': [100, 200, 150, 250]
})
# 按城市和年份聚合,计算销售总额
pivot_table = df.pivot_table(values='Sales', index='City', columns='Year', aggfunc='sum')
print(pivot_table)
10. 高级操作:日期时间处理
Pandas 提供了强大的日期时间处理功能。
转换为日期时间类型:
df['Date'] = pd.to_datetime(df['Date'])
设置索引为日期时间:
df.set_index('Date', inplace=True)
按时间进行重采样:
df.resample('M').sum() # 按月重采样并计算每个月的总和
总结
Pandas 提供了很多强大且灵活的工具来处理数据。你可以:
- 创建
DataFrame
,并通过多种方式导入数据; - 使用 基本选择和过滤操作 访问、修改和清洗数据;
- 通过 聚合、分组、排序 来快速汇总和分析数据;
- 利用 合并和连接 来合并多个数据源;
- 通过 日期时间操作 处理和分析时间序列数据。
掌握这些基本操作后,你就能轻松地进行数据清理、分析和处理了!