Pandas教程:详解Series和DataFrame使用方法

目录

一、Pandas Series

1. 概述

2. 创建 Series

3. Series 的基本操作

4. Series 的方法与属性

5. Series 与 Numpy 的结合

二、Pandas DataFrame

1. 概述

2. 创建 DataFrame

3. DataFrame 的基本操作

4. DataFrame 的方法与属性

5. 数据清洗与处理

6. 数据合并与连接

三、Series 和 DataFrame 之间的转换

1. 从 DataFrame 提取 Series

2. 将 Series 转换为 DataFrame

3. 多个 Series 创建 DataFrame

四、高级操作与技巧

1. 使用 MultiIndex(多重索引)

2. 数据透视表和交叉表

3. 时间序列数据

五、实践与项目

1. 小型数据分析项目

2. 综合案例


Pandas是Python中非常强大的数据分析库。它提供了两个主要的数据结构:Series和DataFrame,用于高效地处理和分析数据。本文将详细介绍这两种数据结构,并提供丰富的代码示例,帮助你更好地理解和使用Pandas。

 

一、Pandas Series


a    10
b    20
c    30
d    40
dtype: int64

1. 概述

Series是一维的数据结构,类似于Python中的列表或一维数组,但具有更多的功能。每个Series都有一个数据值列表和一个相关的索引列表。

2. 创建 Series

(1)使用列表创建 Series

import pandas as pd

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

(2)使用字典创建 Series

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

(3)使用标量值和索引创建 Series

data = 5
index = ['a', 'b', 'c', 'd']
series3 = pd.Series(data, index=index)
print(series3)

(4)使用 Numpy 数组创建 Series

import numpy as np

data = np.array([1, 2, 3, 4])
series4 = pd.Series(data)
print(series4)
3. Series 的基本操作

(1)访问元素(索引和切片)

print(series1[0])  # 输出:10
print(series2['b'])  # 输出:20
print(series1[1:3])  # 输出:20, 30

(2)修改元素

series1[0] = 100
print(series1)

(3)条件筛选

print(series1[series1 > 20])  # 输出:30, 40

(4)数学运算

print(series1 + 5)  # 输出:15, 25, 35, 45
4. Series 的方法与属性

(1)head()tail()

print(series1.head(2))  # 输出前2个元素
print(series1.tail(2))  # 输出后2个元素

(2)describe()

print(series1.describe())  # 输出统计信息摘要

(3)value_counts()

print(series1.value_counts())  # 输出值的频率

(4)unique()nunique()

print(series1.unique())  # 输出唯一值
print(series1.nunique())  # 输出唯一值的数量

(5)apply()map()

# apply
print(series1.apply(lambda x: x * 2))

# map
print(series2.map({'a': 100, 'b': 200, 'c': 300}))
5. Series 与 Numpy 的结合

(1)使用 Numpy 函数处理 Series

print(np.sqrt(series1))

(2)Series 和 Numpy 数组的互操作

array = series1.values
print(array)

new_series = pd.Series(array)
print(new_series)

二、Pandas DataFrame


      Name  Age  Salary
0    Alice   25   50000
1      Bob   30   60000
2  Charlie   35   70000

1. 概述

DataFrame是二维的数据结构,类似于电子表格或SQL表格。DataFrame包含有序的列,每列可以是不同的数据类型。

2. 创建 DataFrame

(1)使用字典创建 DataFrame

data = {
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, 35],
    'salary': [50000, 60000, 70000]
}
df1 = pd.DataFrame(data)
print(df1)

(2)使用列表创建 DataFrame

data = [
    ['Alice', 25, 50000],
    ['Bob', 30, 60000],
    ['Charlie', 35, 70000]
]
columns = ['name', 'age', 'salary']
df2 = pd.DataFrame(data, columns=columns)
print(df2)

(3)使用 Numpy 数组创建 DataFrame

import numpy as np

data = np.array([[25, 50000], [30, 60000], [35, 70000]])
df3 = pd.DataFrame(data, columns=['age', 'salary'])
print(df3)

(4)使用其他 DataFrame 创建新的 DataFrame

df4 = df1[['name', 'age']]
print(df4)
3. DataFrame 的基本操作

(1)选择列

print(df1['name'])  # 输出name列
print(df1[['name', 'age']])  # 输出name和age列

(2)选择行

print(df1.loc[0])  # 按标签选择,输出第一行
print(df1.iloc[0])  # 按位置选择,输出第一行

(3)选择特定的元素

print(df1.at[0, 'name'])  # 输出第一行name列的值
print(df1.iat[0, 0])  # 输出第一行第一列的值

(4)添加和删除列

df1['new_col'] = [1, 2, 3]
print(df1)

df1.drop('new_col', axis=1, inplace=True)
print(df1)

(5)添加和删除行

df1.loc[3] = ['David', 40, 80000]
print(df1)

df1.drop(3, inplace=True)
print(df1)
4. DataFrame 的方法与属性

(1)head()tail()

print(df1.head(2))  # 输出前2行
print(df1.tail(2))  # 输出后2行

(2)info()

print(df1.info())  # 输出DataFrame的基本信息

(3)describe()

print(df1.describe())  # 输出数值列的统计信息摘要

(4)T(转置)

print(df1.T)  # 转置

(5)sort_values()sort_index()

print(df1.sort_values(by='age'))  # 按age列排序
print(df1.sort_index())  # 按索引排序

(6)groupby()

grouped = df1.groupby('age')
print(grouped.mean())  # 输出每个年龄组的平均值

(7)pivot_table()

pivot = df1.pivot_table(values='salary', index='age', columns='name', aggfunc='mean')
print(pivot)
5. 数据清洗与处理

(1)缺失值处理

data = {'name': ['Alice', 'Bob', None], 'age': [25, 30, None]}
df5 = pd.DataFrame(data)

print(df5.isnull())  # 判断缺失值
print(df5.dropna())  # 删除缺失值
print(df5.fillna('Unknown'))  # 填充缺失值

(2)数据类型转换

df5['age'] = df5['age'].astype('float')
print(df5.dtypes)

(3)重命名列

df5.rename(columns={'name': 'Name', 'age': 'Age'}, inplace=True)
print(df5)

(4)数据去重

data = {'name': ['Alice', 'Bob', 'Alice'], 'age': [25, 30, 25]}
df6 = pd.DataFrame(data)

print(df6.drop_duplicates())
6. 数据合并与连接

(1)concat()

data1 = {'name': ['Alice', 'Bob'], 'age': [25, 30]}
data2 = {'name': ['Charlie', 'David'], 'age': [35, 40]}
df7 = pd.DataFrame(data1)
df8 = pd.DataFrame(data2)

df_concat = pd.concat([df7, df8])
print(df_concat)

(2)merge()join()

left = pd.DataFrame({'key': ['A', 'B', 'C'], 'value': [1, 2, 3]})
right = pd.DataFrame({'key': ['A', 'B', 'D'], 'value': [4, 5, 6]})

df_merge = pd.merge(left, right, on='key', how='inner')
print(df_merge)

三、Series 和 DataFrame 之间的转换


1. 从 DataFrame 提取 Series
name_series = df1['name']
print(name_series)
2. 将 Series 转换为 DataFrame
name_df = name_series.to_frame()
print(name_df)
3. 多个 Series 创建 DataFrame
age_series = pd.Series([25, 30, 35])
salary_series = pd.Series([50000, 60000, 70000])

df9 = pd.DataFrame({'age': age_series, 'salary': salary_series})
print(df9)

四、高级操作与技巧


1. 使用 MultiIndex(多重索引)

(1)创建 MultiIndex

arrays = [
    ['A', 'A', 'B', 'B'],
    [1, 2, 1, 2]
]
multi_index = pd.MultiIndex.from_arrays(arrays, names=('letter', 'number'))
df10 = pd.DataFrame({'value': [10, 20, 30, 40]}, index=multi_index)
print(df10)

(2)访问 MultiIndex 数据

print(df10.loc['A'])
print(df10.loc[('A', 1)])
2. 数据透视表和交叉表

(1)pivot_table()

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David'],
    'age': [25, 30, 35, 40],
    'score': [85, 90, 95, 100]
}
df11 = pd.DataFrame(data)

pivot = df11.pivot_table(values='score', index='age', columns='name', aggfunc='mean')
print(pivot)

(2)crosstab()

data = {
    'name': ['Alice', 'Bob', 'Alice', 'Bob'],
    'score': [85, 90, 85, 90]
}
df12 = pd.DataFrame(data)

crosstab = pd.crosstab(df12['name'], df12['score'])
print(crosstab)
3. 时间序列数据

(1)时间索引

dates = pd.date_range('20230101', periods=6)
df13 = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=['A', 'B', 'C', 'D'])
print(df13)

(2)处理时间数据的方法

print(df13.resample('D').mean())  # 按天重采样

五、实践与项目


1. 小型数据分析项目

(1)实际数据集的导入

url = 'https://people.sc.fsu.edu/~jburkardt/data/csv/hw_200.csv'
data = pd.read_csv(url)
print(data.head())
print(data.info())

(2)数据清洗与处理

# 删除缺失值
data.dropna(inplace=True)

# 转换数据类型
data[' "Height(Inches)"'] = data[' "Height(Inches)"'].astype('float')

(3)数据分析与可视化

import matplotlib.pyplot as plt

# 简单的描述统计
print(data.describe())

# 可视化
data[' "Height(Inches)"'].hist()
plt.show()
2. 综合案例

综合运用 Pandas 的各种功能进行数据处理和分析

# 合并数据
data1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value': [1, 2, 3]})
data2 = pd.DataFrame({'key': ['A', 'B', 'D'], 'value': [4, 5, 6]})
merged_data = pd.merge(data1, data2, on='key')

# 分组分析
grouped = merged_data.groupby('key')
print(grouped.mean())

# 透视表
pivot = pd.pivot_table(merged_data, values='value_x', index='key', columns='value_y', aggfunc='sum')
print(pivot)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旦莫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值