温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Pandas数据结构的介绍及如何创建Series,DataFrame对象

发布时间:2021-10-08 09:12:13 来源:亿速云 阅读:267 作者:柒染 栏目:开发技术
# Pandas数据结构的介绍及如何创建Series,DataFrame对象 ## 一、Pandas简介 ### 1.1 Pandas概述 Pandas是Python中最流行的数据分析库之一,由Wes McKinney于2008年开发。名称"Pandas"源自"Panel Data"(面板数据)的缩写。作为NumPy的扩展库,Pandas专门为解决数据分析任务而设计,尤其擅长处理以下类型的数据: - 表格数据(如SQL表格、Excel表格) - 时间序列数据 - 异构数据(不同类型的数据列) - 带标签的数据(行列都有标识) ### 1.2 Pandas的核心优势 1. **高效处理**:基于NumPy实现,运算性能优异 2. **灵活索引**:支持复杂的行列索引操作 3. **缺失值处理**:内置完善的缺失值处理方法 4. **数据对齐**:自动按标签对齐不同数据源 5. **丰富IO**:支持CSV、Excel、SQL、JSON等多种数据格式 ### 1.3 安装与导入 ```python # 安装命令 pip install pandas # 标准导入方式 import pandas as pd 

二、Pandas核心数据结构

2.1 Series(序列)

2.1.1 Series基本概念

Series是Pandas中最基本的一维数据结构,可以看作带标签的数组。其特点包括:

  • 类似一维数组,但包含索引(index)
  • 可以存储任何数据类型(整数、字符串、浮点数、Python对象等)
  • 索引可以是数字、字符串或时间戳

2.1.2 Series内存结构

+--------+-----------+ | Index | Values | +--------+-----------+ | 0 | 'A' | | 1 | 'B' | | 2 | 'C' | +--------+-----------+ 

2.2 DataFrame(数据框)

2.2.1 DataFrame基本概念

DataFrame是Pandas中最常用的二维表格型数据结构,特点包括:

  • 可以看作Series的容器(多个Series共享同一个索引)
  • 每列可以是不同的数据类型
  • 既有行索引(index)也有列索引(columns)
  • 支持行列的增删改查

2.2.2 DataFrame内存结构

+--------+-----------+-----------+-----------+ | Index | Column A | Column B | Column C | +--------+-----------+-----------+-----------+ | 0 | 1 | 'X' | True | | 1 | 2 | 'Y' | False | +--------+-----------+-----------+-----------+ 

2.3 Index(索引)

2.3.1 索引的作用

  • 快速数据访问的”键”
  • 自动数据对齐的基础
  • 支持高级索引和切片操作

2.3.2 常见索引类型

  • RangeIndex:默认的数字范围索引
  • DateTimeIndex:时间序列专用索引
  • MultiIndex:多层索引(层次化索引)

三、创建Series对象

3.1 基本创建方法

3.1.1 从列表创建

import pandas as pd # 基本创建(自动生成数字索引) s1 = pd.Series([1, 3, 5, 7]) print(s1) 

3.1.2 指定索引

# 自定义索引 s2 = pd.Series([10, 20, 30], index=['a', 'b', 'c']) print(s2) 

3.1.3 从字典创建(自动匹配索引)

data = {'北京': 2154, '上海': 2428, '广州': 1867} s3 = pd.Series(data) print(s3) 

3.2 特殊类型Series

3.2.1 创建时间序列

dates = pd.date_range('20230101', periods=4) s4 = pd.Series([1.2, 3.4, 5.6, 7.8], index=dates) 

3.2.2 创建带缺失值的Series

s5 = pd.Series([1, None, 3, np.nan]) 

3.3 Series常用属性

s = pd.Series([10, 20, 30], index=['a', 'b', 'c']) print(s.values) # 值数组 [10 20 30] print(s.index) # 索引对象 Index(['a', 'b', 'c']) print(s.dtype) # 数据类型 int64 print(s.shape) # 形状 (3,) print(s.size) # 元素数量 3 print(s.name) # 名称 None 

四、创建DataFrame对象

4.1 基本创建方法

4.1.1 从字典创建(最常用)

data = { '城市': ['北京', '上海', '广州'], '人口(万)': [2154, 2428, 1867], 'GDP(亿)': [40269, 43214, 28232] } df1 = pd.DataFrame(data) print(df1) 

4.1.2 指定行列索引

df2 = pd.DataFrame( data, index=['a', 'b', 'c'], # 行索引 columns=['城市', 'GDP(亿)'] # 选择/排序列 ) 

4.2 其他创建方式

4.2.1 从二维数组创建

arr = np.random.rand(3, 4) df3 = pd.DataFrame(arr, columns=list('ABCD')) 

4.2.2 从列表创建

data = [ ['北京', 2154, 40269], ['上海', 2428, 43214] ] df4 = pd.DataFrame(data, columns=['城市', '人口', 'GDP']) 

4.2.3 从Series字典创建

s1 = pd.Series([2154, 2428, 1867]) s2 = pd.Series([40269, 43214, 28232]) df5 = pd.DataFrame({'人口': s1, 'GDP': s2}) 

4.3 特殊类型DataFrame

4.3.1 创建带时间索引的DataFrame

dates = pd.date_range('20230101', periods=6) df6 = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD')) 

4.3.2 创建多层索引DataFrame

arrays = [ ['A', 'A', 'B', 'B'], [1, 2, 1, 2] ] index = pd.MultiIndex.from_arrays(arrays, names=('字母', '数字')) df7 = pd.DataFrame(np.random.randn(4, 3), index=index, columns=['X', 'Y', 'Z']) 

4.4 DataFrame常用属性

df = pd.DataFrame({'A': [1,2], 'B': [3,4]}) print(df.shape) # 形状 (2,2) print(df.index) # 行索引 RangeIndex(start=0, stop=2, step=1) print(df.columns) # 列索引 Index(['A', 'B']) print(df.dtypes) # 每列数据类型 print(df.values) # 二维ndarray print(df.T) # 转置 

五、数据结构操作基础

5.1 索引与选择

5.1.1 Series索引

s = pd.Series([10, 20, 30], index=['a', 'b', 'c']) # 标签索引 print(s['a']) # 10 # 位置索引 print(s.iloc[0]) # 10 # 布尔索引 print(s[s > 15]) # b 20, c 30 

5.1.2 DataFrame索引

df = pd.DataFrame({'A': [1,2,3], 'B': [4,5,6]}) # 列选择 print(df['A']) # 获取A列 # 行选择 print(df.loc[0]) # 第一行 print(df.iloc[0:2]) # 前两行 # 行列组合 print(df.loc[0, 'A']) # 1 

5.2 数据修改

5.2.1 添加/修改列

df['C'] = df['A'] + df['B'] # 新增列 df['A'] = [10, 20, 30] # 修改列 

5.2.2 删除数据

# 删除列 df.drop('A', axis=1, inplace=True) # 删除行 df.drop([0,1], axis=0, inplace=True) 

六、实际应用示例

6.1 数据清洗示例

# 创建含缺失值的数据 df = pd.DataFrame({ 'A': [1, None, 3], 'B': [None, 5, 6] }) # 填充缺失值 df_filled = df.fillna({'A': df['A'].mean(), 'B': 0}) 

6.2 数据分析示例

# 创建销售数据 sales = pd.DataFrame({ '日期': pd.date_range('20230101', periods=5), '产品': ['A', 'B', 'A', 'C', 'B'], '销量': [120, 150, 80, 200, 90] }) # 按产品汇总 summary = sales.groupby('产品')['销量'].sum() 

七、性能优化建议

  1. 避免循环:尽量使用向量化操作
  2. 选择合适的数据类型:如用category代替object
  3. 使用eval()/query():加速布尔运算
  4. 分块处理:大数据集使用chunksize参数
  5. 使用高效函数:如nlargest()代替sort_values().head()

八、总结

Pandas的Series和DataFrame为数据分析提供了强大的基础工具。通过本文的学习,您应该已经掌握:

  1. 两种核心数据结构的特点与差异
  2. 多种创建Series和DataFrame的方法
  3. 基本的数据选择和操作技巧
  4. 简单的实际应用场景

建议读者通过实际数据集练习这些操作,逐步掌握Pandas的强大功能。后续可以进一步学习: - 数据清洗与预处理 - 数据聚合与分组操作 - 时间序列处理 - 性能优化技巧 “`

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI