Skip to main content

DataFrame

· 7 min read
Jiujiuwhoami
Digital nomads

DataFramePandas 库中最常用的数据结构之一,它类似于一个表格,包含行和列,可以看作是一个二维数组或数据库表。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 提供了很多强大且灵活的工具来处理数据。你可以:

  1. 创建 DataFrame,并通过多种方式导入数据;
  2. 使用 基本选择和过滤操作 访问、修改和清洗数据;
  3. 通过 聚合、分组、排序 来快速汇总和分析数据;
  4. 利用 合并和连接 来合并多个数据源;
  5. 通过 日期时间操作 处理和分析时间序列数据。

掌握这些基本操作后,你就能轻松地进行数据清理、分析和处理了!