MK
摩柯社区 - 一个极简的技术知识社区
AI 面试

Python Pandas库的基础操作教程

2022-03-191.8k 阅读

Pandas库简介

Pandas 是 Python 中用于数据处理和分析的核心库之一。它构建在 NumPy 之上,提供了高效的数据结构和数据分析工具。Pandas 主要有两个核心数据结构:Series 和 DataFrame,这两种数据结构使得数据处理和分析变得更加直观和高效。

安装Pandas

在开始使用 Pandas 之前,需要确保它已经安装在你的 Python 环境中。如果你使用的是 Anaconda 发行版,Pandas 通常已经预装。如果没有预装,可以使用以下命令通过 pip 安装:

pip install pandas

或者,如果你使用 conda

conda install pandas

Series基础

Series的创建

Series 是一种类似于一维数组的对象,它由一组数据以及一组与之相关的数据标签(即索引)组成。可以通过以下几种方式创建 Series:

  1. 从列表创建
import pandas as pd

data = [10, 20, 30, 40]
s = pd.Series(data)
print(s)

在上述代码中,创建了一个简单的 Series,默认情况下,索引从 0 开始顺序递增。 2. 指定索引创建

import pandas as pd

data = [10, 20, 30, 40]
index = ['a', 'b', 'c', 'd']
s = pd.Series(data, index=index)
print(s)

这里通过 index 参数指定了自定义索引,使得每个数据值与特定的标签相对应。 3. 从字典创建

import pandas as pd

data = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
s = pd.Series(data)
print(s)

字典的键会自动成为 Series 的索引,值则成为 Series 的数据。

Series的基本属性

  1. 索引:可以通过 index 属性获取 Series 的索引。
import pandas as pd

data = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
s = pd.Series(data)
print(s.index)
  1. :通过 values 属性获取 Series 的实际数据值。
import pandas as pd

data = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
s = pd.Series(data)
print(s.values)
  1. 数据类型:使用 dtype 属性查看 Series 中数据的类型。
import pandas as pd

data = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
s = pd.Series(data)
print(s.dtype)

Series的基本操作

  1. 索引和切片
    • 按索引取值
import pandas as pd

data = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
s = pd.Series(data)
print(s['b'])
- **切片操作**:
import pandas as pd

data = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
s = pd.Series(data)
print(s['a':'c'])

注意,与 Python 列表切片不同,Series 的切片是包含末端的。 2. 数学运算:可以对 Series 进行各种数学运算,这些运算会应用到 Series 的每个元素上。

import pandas as pd

data = [10, 20, 30, 40]
s = pd.Series(data)
result = s * 2
print(result)
  1. 条件筛选:可以根据条件筛选出符合要求的数据。
import pandas as pd

data = [10, 20, 30, 40]
s = pd.Series(data)
filtered = s[s > 20]
print(filtered)

DataFrame基础

DataFrame的创建

DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame 既有行索引也有列索引,可以被看做是由 Series 组成的字典(共用同一个索引)。以下是创建 DataFrame 的常见方法:

  1. 从字典创建
import pandas as pd

data = {
    'col1': [1, 2, 3],
    'col2': [4, 5, 6]
}
df = pd.DataFrame(data)
print(df)

这里字典的键成为 DataFrame 的列名,值则组成了 DataFrame 的数据。 2. 从列表的字典创建

import pandas as pd

data = [
    {'col1': 1, 'col2': 4},
    {'col1': 2, 'col2': 5},
    {'col1': 3, 'col2': 6}
]
df = pd.DataFrame(data)
print(df)
  1. 从 Series 创建
import pandas as pd

s1 = pd.Series([1, 2, 3], name='col1')
s2 = pd.Series([4, 5, 6], name='col2')
df = pd.DataFrame([s1, s2]).transpose()
print(df)

DataFrame的基本属性

  1. 索引:与 Series 类似,DataFrame 也有 index 属性用于获取行索引。
import pandas as pd

data = {
    'col1': [1, 2, 3],
    'col2': [4, 5, 6]
}
df = pd.DataFrame(data)
print(df.index)
  1. :通过 columns 属性获取列索引。
import pandas as pd

data = {
    'col1': [1, 2, 3],
    'col2': [4, 5, 6]
}
df = pd.DataFrame(data)
print(df.columns)
  1. 形状:使用 shape 属性获取 DataFrame 的行数和列数。
import pandas as pd

data = {
    'col1': [1, 2, 3],
    'col2': [4, 5, 6]
}
df = pd.DataFrame(data)
print(df.shape)
  1. 数据类型dtypes 属性可以查看每列的数据类型。
import pandas as pd

data = {
    'col1': [1, 2, 3],
    'col2': [4, 5, 6]
}
df = pd.DataFrame(data)
print(df.dtypes)

DataFrame的基本操作

  1. 选取列
    • 通过列名选取单列
import pandas as pd

data = {
    'col1': [1, 2, 3],
    'col2': [4, 5, 6]
}
df = pd.DataFrame(data)
col1 = df['col1']
print(col1)
- **选取多列**:
import pandas as pd

data = {
    'col1': [1, 2, 3],
    'col2': [4, 5, 6],
    'col3': [7, 8, 9]
}
df = pd.DataFrame(data)
cols = df[['col1', 'col3']]
print(cols)
  1. 选取行
    • 通过索引标签选取行
import pandas as pd

data = {
    'col1': [1, 2, 3],
    'col2': [4, 5, 6]
}
df = pd.DataFrame(data, index=['a', 'b', 'c'])
row = df.loc['b']
print(row)
- **通过整数位置选取行**:
import pandas as pd

data = {
    'col1': [1, 2, 3],
    'col2': [4, 5, 6]
}
df = pd.DataFrame(data)
row = df.iloc[1]
print(row)
  1. 索引和切片综合操作
    • 选取特定的行和列
import pandas as pd

data = {
    'col1': [1, 2, 3],
    'col2': [4, 5, 6],
    'col3': [7, 8, 9]
}
df = pd.DataFrame(data, index=['a', 'b', 'c'])
subset = df.loc[['a', 'c'], ['col1', 'col3']]
print(subset)
- **通过切片选取**:
import pandas as pd

data = {
    'col1': [1, 2, 3],
    'col2': [4, 5, 6],
    'col3': [7, 8, 9]
}
df = pd.DataFrame(data)
subset = df.iloc[0:2, 1:3]
print(subset)
  1. 数据添加与修改
    • 添加列
import pandas as pd

data = {
    'col1': [1, 2, 3],
    'col2': [4, 5, 6]
}
df = pd.DataFrame(data)
df['col3'] = [7, 8, 9]
print(df)
- **修改列数据**:
import pandas as pd

data = {
    'col1': [1, 2, 3],
    'col2': [4, 5, 6]
}
df = pd.DataFrame(data)
df['col1'] = df['col1'] * 2
print(df)
  1. 删除列和行
    • 删除列
import pandas as pd

data = {
    'col1': [1, 2, 3],
    'col2': [4, 5, 6],
    'col3': [7, 8, 9]
}
df = pd.DataFrame(data)
df = df.drop('col3', axis=1)
print(df)
- **删除行**:
import pandas as pd

data = {
    'col1': [1, 2, 3],
    'col2': [4, 5, 6],
    'col3': [7, 8, 9]
}
df = pd.DataFrame(data, index=['a', 'b', 'c'])
df = df.drop('b', axis=0)
print(df)

数据清洗

处理缺失值

在实际的数据处理中,缺失值是很常见的问题。Pandas 提供了多种方法来处理缺失值。

  1. 检测缺失值:可以使用 isnull()notnull() 方法来检测 DataFrame 中的缺失值。
import pandas as pd

data = {
    'col1': [1, None, 3],
    'col2': [4, 5, None]
}
df = pd.DataFrame(data)
missing_values = df.isnull()
print(missing_values)
  1. 删除缺失值dropna() 方法可以删除包含缺失值的行或列。
import pandas as pd

data = {
    'col1': [1, None, 3],
    'col2': [4, 5, None]
}
df = pd.DataFrame(data)
df = df.dropna()
print(df)

默认情况下,dropna() 删除任何包含缺失值的行。可以通过设置 axis 参数删除列,以及通过 how='all' 等参数来更精细地控制删除条件。 3. 填充缺失值fillna() 方法用于填充缺失值。

import pandas as pd

data = {
    'col1': [1, None, 3],
    'col2': [4, 5, None]
}
df = pd.DataFrame(data)
df = df.fillna(0)
print(df)

也可以使用更复杂的填充策略,比如使用前一个值填充 method='ffill',或使用后一个值填充 method='bfill'

处理重复值

  1. 检测重复值duplicated() 方法可以检测 DataFrame 中的重复行。
import pandas as pd

data = {
    'col1': [1, 2, 2],
    'col2': [4, 5, 5]
}
df = pd.DataFrame(data)
duplicates = df.duplicated()
print(duplicates)
  1. 删除重复值drop_duplicates() 方法用于删除重复行。
import pandas as pd

data = {
    'col1': [1, 2, 2],
    'col2': [4, 5, 5]
}
df = pd.DataFrame(data)
df = df.drop_duplicates()
print(df)

数据聚合与分组

分组操作

分组操作是数据分析中非常重要的一部分,Pandas 通过 groupby 方法实现分组功能。假设我们有一个包含销售数据的 DataFrame,其中有产品名称、销售地区和销售额等信息,我们可以按照产品名称或销售地区进行分组,并对销售额进行聚合操作。

import pandas as pd

data = {
    'product': ['A', 'B', 'A', 'B'],
   'region': ['North', 'South', 'North', 'South'],
   'sales': [100, 200, 150, 250]
}
df = pd.DataFrame(data)
grouped = df.groupby('product')
print(grouped)

这里通过 groupby 方法按照 product 列进行了分组,返回的 grouped 对象包含了分组的信息。

聚合函数

  1. 常用聚合函数:对分组后的数据可以应用各种聚合函数,如 summeancount 等。
import pandas as pd

data = {
    'product': ['A', 'B', 'A', 'B'],
   'region': ['North', 'South', 'North', 'South'],
   'sales': [100, 200, 150, 250]
}
df = pd.DataFrame(data)
grouped = df.groupby('product')
aggregated = grouped['sales'].sum()
print(aggregated)

上述代码中,按照 product 分组后,对 sales 列求了总和。类似地,可以使用 mean() 求平均值,count() 统计数量等。 2. 自定义聚合函数:除了使用内置的聚合函数,还可以定义自己的聚合函数。

import pandas as pd

def custom_aggregation(x):
    return x.max() - x.min()

data = {
    'product': ['A', 'B', 'A', 'B'],
   'region': ['North', 'South', 'North', 'South'],
   'sales': [100, 200, 150, 250]
}
df = pd.DataFrame(data)
grouped = df.groupby('product')
aggregated = grouped['sales'].agg(custom_aggregation)
print(aggregated)

这里定义了一个计算最大值与最小值之差的自定义聚合函数,并应用到分组后的数据上。

数据合并与连接

合并操作(merge)

merge 方法类似于 SQL 中的 JOIN 操作,用于根据一个或多个键将不同的 DataFrame 合并在一起。假设我们有两个 DataFrame,一个包含学生的基本信息,另一个包含学生的成绩信息,我们可以根据学生 ID 将两个 DataFrame 合并。

import pandas as pd

students = {
    'student_id': [1, 2, 3],
     'name': ['Alice', 'Bob', 'Charlie']
}
student_df = pd.DataFrame(students)

scores = {
    'student_id': [1, 2, 4],
     'score': [85, 90, 78]
}
score_df = pd.DataFrame(scores)

merged = pd.merge(student_df, score_df, on='student_id')
print(merged)

默认情况下,merge 执行内连接,只返回在两个 DataFrame 中都存在的键值对应的行。可以通过 how 参数指定连接方式,如 'left''right''outer' 等。

连接操作(concat)

concat 方法用于沿着一个轴(行或列)将多个 DataFrame 连接在一起。

  1. 按行连接
import pandas as pd

df1 = pd.DataFrame({
    'col1': [1, 2],
    'col2': [3, 4]
})

df2 = pd.DataFrame({
    'col1': [5, 6],
    'col2': [7, 8]
})

concatenated = pd.concat([df1, df2])
print(concatenated)
  1. 按列连接
import pandas as pd

df1 = pd.DataFrame({
    'col1': [1, 2],
    'col2': [3, 4]
})

df2 = pd.DataFrame({
    'col3': [5, 6],
    'col4': [7, 8]
})

concatenated = pd.concat([df1, df2], axis=1)
print(concatenated)

数据读取与写入

读取数据

Pandas 支持多种数据格式的读取,如 CSV、Excel、SQL 等。

  1. 读取 CSV 文件
import pandas as pd

df = pd.read_csv('data.csv')
print(df.head())

read_csv 方法有很多参数,可以用于指定分隔符、编码、是否有表头等等。 2. 读取 Excel 文件

import pandas as pd

df = pd.read_excel('data.xlsx')
print(df.head())

同样,read_excel 也有参数可用于指定工作表名称、是否忽略表头等等。

写入数据

  1. 写入 CSV 文件
import pandas as pd

data = {
    'col1': [1, 2, 3],
    'col2': [4, 5, 6]
}
df = pd.DataFrame(data)
df.to_csv('output.csv', index=False)

to_csv 方法的 index=False 参数表示不将行索引写入文件。 2. 写入 Excel 文件

import pandas as pd

data = {
    'col1': [1, 2, 3],
    'col2': [4, 5, 6]
}
df = pd.DataFrame(data)
df.to_excel('output.xlsx', index=False)

通过以上对 Pandas 库基础操作的详细介绍,希望能帮助你快速上手使用 Pandas 进行数据处理和分析。在实际应用中,Pandas 的功能远不止于此,随着对数据处理需求的深入,你可以进一步探索其更高级的功能。