1.4 Pandas 数据结构:DataFrame


文档摘要

1.4 Pandas 数据结构:DataFrame 1.4 Pandas 数据结构:DataFrame DataFrame 是 Pandas 库中最核心的数据结构之一,它是一个二维的、大小可变的、潜在的异构表格型数据结构,具有带标签的轴(行和列)。你可以把它想象成一个 Excel 表格或 SQL 数据表,但拥有更强大的数据处理能力。 1.4.1 DataFrame 的特性 二维性: DataFrame 以行和列的形式组织数据,类似于表格。 大小可变: 可以动态地添加或删除行和列。 异构性: 每一列可以包含不同的数据类型(数值、字符串、布尔值等)。 带标签的轴: 行和列都有标签(索引),方便数据的访问和操作。 数据对齐: Pandas 会根据索引自动对齐数据,避免数据错位。

1.4 Pandas 数据结构:DataFrame

1.4 Pandas 数据结构:DataFrame

DataFrame 是 Pandas 库中最核心的数据结构之一,它是一个二维的、大小可变的、潜在的异构表格型数据结构,具有带标签的轴(行和列)。你可以把它想象成一个 Excel 表格或 SQL 数据表,但拥有更强大的数据处理能力。

1.4.1 DataFrame 的特性

  • 二维性: DataFrame 以行和列的形式组织数据,类似于表格。

  • 大小可变: 可以动态地添加或删除行和列。

  • 异构性: 每一列可以包含不同的数据类型(数值、字符串、布尔值等)。

  • 带标签的轴: 行和列都有标签(索引),方便数据的访问和操作。

  • 数据对齐: Pandas 会根据索引自动对齐数据,避免数据错位。

  • 缺失数据处理: 方便地处理缺失值(NaN)。

1.4.2 DataFrame 的创建

DataFrame 可以通过多种方式创建,以下是一些常见的方法:

1. 从字典创建

字典的键会成为列名,字典的值会成为列的数据。

import pandas as pd data = {'姓名': ['Alice', 'Bob', 'Charlie'], '年龄': [25, 30, 28], '城市': ['北京', '上海', '广州']} df = pd.DataFrame(data) print(df)

输出:

姓名 年龄 城市 0 Alice 25 北京 1 Bob 30 上海 2 Charlie 28 广州

2. 从列表创建

列表的元素会成为行,可以指定列名。

data = [['Alice', 25, '北京'], ['Bob', 30, '上海'], ['Charlie', 28, '广州']] df = pd.DataFrame(data, columns=['姓名', '年龄', '城市']) print(df)

输出:

姓名 年龄 城市 0 Alice 25 北京 1 Bob 30 上海 2 Charlie 28 广州

3. 从 Series 创建

Series 可以作为 DataFrame 的列。

s1 = pd.Series(['Alice', 'Bob', 'Charlie']) s2 = pd.Series([25, 30, 28]) s3 = pd.Series(['北京', '上海', '广州']) df = pd.DataFrame({'姓名': s1, '年龄': s2, '城市': s3}) print(df)

输出:

姓名 年龄 城市 0 Alice 25 北京 1 Bob 30 上海 2 Charlie 28 广州

4. 从 CSV 文件创建

这是最常用的方法之一,使用 pd.read_csv() 函数。

# 假设有一个名为 data.csv 的文件 # 姓名,年龄,城市 # Alice,25,北京 # Bob,30,上海 # Charlie,28,广州 df = pd.read_csv('data.csv') print(df)

输出:

姓名 年龄 城市 0 Alice 25 北京 1 Bob 30 上海 2 Charlie 28 广州

5. 从 Excel 文件创建

使用 pd.read_excel() 函数。

# 假设有一个名为 data.xlsx 的文件 df = pd.read_excel('data.xlsx') print(df)

代码示例:

创建一个DataFrame并打印其信息

import pandas as pd data = {'col1': [1, 2], 'col2': [3, 4]} df = pd.DataFrame(data=data) print(df) print(df.dtypes) #查看列的数据类型 print(df.index) #查看索引 print(df.columns) #查看列名

1.4.3 DataFrame 的基本操作

1. 查看数据

  • df.head(n): 查看前 n 行数据,默认为 5 行。

  • df.tail(n): 查看后 n 行数据,默认为 5 行。

  • df.info(): 查看 DataFrame 的信息,包括索引、列名、数据类型、非空值数量等。

  • df.describe(): 查看数值型列的统计信息,包括计数、均值、标准差、最小值、四分位数、最大值。

  • df.shape: 返回 DataFrame 的行数和列数。

2. 选择数据

  • 选择列:

    • df['列名']: 选择单列,返回 Series。

    • df[['列名1', '列名2']]: 选择多列,返回 DataFrame。

  • 选择行:

    • df.loc[索引]: 基于标签选择行。

    • df.iloc[位置]: 基于位置选择行。

  • 选择特定单元格:

    • df.loc[索引, '列名']

    • df.iloc[位置, 列位置]

3. 增加列

  • 直接赋值:df['新列名'] = 值

  • 使用 insert() 方法:df.insert(位置, '新列名', 值)

4. 删除列

  • df.drop('列名', axis=1): 删除单列。

  • df.drop(['列名1', '列名2'], axis=1): 删除多列。

5. 增加行

  • df.loc[新索引] = [值1, 值2, ...]

  • df.append(新 DataFrame) (不推荐,效率较低)

6. 删除行

  • df.drop(索引): 删除单行。

  • df.drop([索引1, 索引2]): 删除多行。

7. 修改数据

  • df.loc[索引, '列名'] = 新值

  • df.iloc[位置, 列位置] = 新值

8. 排序

  • df.sort_values(by='列名', ascending=True/False): 按列排序。

  • df.sort_index(): 按索引排序。

代码示例:

import pandas as pd data = {'姓名': ['Alice', 'Bob', 'Charlie', 'David'], '年龄': [25, 30, 28, 22], '城市': ['北京', '上海', '广州', '深圳'], '工资': [5000, 6000, 5500, 4800]} df = pd.DataFrame(data) # 查看前两行 print(df.head(2)) # 查看DataFrame信息 print(df.info()) # 选择 '姓名' 列 print(df['姓名']) # 选择 '姓名' 和 '年龄' 列 print(df[['姓名', '年龄']]) # 选择索引为 1 的行 print(df.loc[1]) # 选择第 2 行 print(df.iloc[1]) # 选择 'Alice' 的年龄 print(df.loc[df['姓名'] == 'Alice', '年龄']) # 增加 '性别' 列 df['性别'] = ['女', '男', '男', '男'] print(df) # 删除 '城市' 列 df = df.drop('城市', axis=1) print(df) # 按年龄排序 df = df.sort_values(by='年龄', ascending=False) print(df)

1.4.4 DataFrame 的索引

DataFrame 的索引是其灵魂,它允许我们以高效的方式访问和操作数据。

  • 行索引 (Index): 默认情况下,Pandas 会自动创建一个从 0 开始的整数索引。也可以使用 DataFrame 中的某一列作为索引。

  • 列索引 (Columns): DataFrame 的列名。

设置索引

  • df.set_index('列名'): 将 DataFrame 的某一列设置为索引。

  • df.reset_index(): 重置索引,将索引恢复为默认的整数索引,并将原来的索引作为新的一列。

多重索引 (MultiIndex)

DataFrame 可以拥有多重索引,即行索引或列索引由多个层级组成。这在处理层次化数据时非常有用。

代码示例:

import pandas as pd data = {'姓名': ['Alice', 'Bob', 'Charlie', 'David'], '年龄': [25, 30, 28, 22], '城市': ['北京', '上海', '广州', '深圳'], '工资': [5000, 6000, 5500, 4800]} df = pd.DataFrame(data) # 将 '姓名' 列设置为索引 df = df.set_index('姓名') print(df) # 重置索引 df = df.reset_index() print(df) # 创建多重索引 index = pd.MultiIndex.from_tuples([('G1', 'A'), ('G1', 'B'), ('G2', 'A'), ('G2', 'B')], names=['Group', 'Letter']) df = pd.DataFrame({'col1': [1, 2, 3, 4], 'col2': [5, 6, 7, 8]}, index=index) print(df)

1.4.5 DataFrame 的数据对齐

Pandas 会根据索引自动对齐数据,这使得不同 DataFrame 之间的操作变得非常方便。

代码示例:

import pandas as pd df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['X', 'Y', 'Z']) df2 = pd.DataFrame({'B': [7, 8, 9], 'C': [10, 11, 12]}, index=['Y', 'Z', 'W']) # 将两个 DataFrame 相加,Pandas 会自动对齐索引和列名 df3 = df1 + df2 print(df3)

输出:

A B C W NaN NaN NaN X NaN NaN NaN Y NaN 12.0 NaN Z NaN 14.0 NaN

可以看到,结果 DataFrame 中,只有索引和列名都相同的单元格才进行了相加,其他单元格的值为 NaN。

1.4.6 DataFrame 的可视化

DataFrame 可以方便地进行可视化,利用 Pandas 内置的绘图功能或者结合 Matplotlib、Seaborn 等库。

代码示例:

import pandas as pd import matplotlib.pyplot as plt data = {'年份': [2018, 2019, 2020, 2021, 2022], '销量': [100, 120, 150, 130, 160]} df = pd.DataFrame(data) # 绘制折线图 df.plot(x='年份', y='销量', kind='line') plt.show() # 绘制柱状图 df.plot(x='年份', y='销量', kind='bar') plt.show()

1.4.7 DataFrame 的数据处理流程

DataFrame 在数据分析中扮演着核心角色,通常的数据处理流程如下:

1.4.8 总结

DataFrame 是 Pandas 中最重要的数据结构,掌握 DataFrame 的创建、操作、索引、数据对齐和可视化是进行数据分析的关键。通过灵活运用 DataFrame,可以高效地处理和分析各种数据。


发布者: 作者: 转发
评论区 (0)
U