当前位置: 首页 > news >正文

Python-Pandas基础

一、Pandas核心数据结构

​1. Series(一维数组)​

  • ​创建方法​​:

    # 从列表创建
    s = pd.Series([1, 3, 5, np.nan], index=['a','b','c','d'])# 从字典创建(自动使用键作为索引)
    s = pd.Series({'A':90, 'B':85, 'C':92})
  • ​核心属性​​:

    属性

    说明

    示例

    s.index

    索引对象

    Index(['a','b','c','d'])

    s.values

    值数组

    array([1,3,5,nan])

    s.dtype

    数据类型

    float64

    s.shape

    数据形状

    (4,)

    s.size

    元素数量

    4

​2. DataFrame(二维表格)​

  • ​创建方法​​:

    # 从字典创建(最常用)
    data = {'姓名':['张三','李四'], '年龄':[25,30], '城市':['北京','上海']}
    df = pd.DataFrame(data)# 指定列顺序和索引
    df = pd.DataFrame(data, columns=['姓名','城市','年龄'], index=['a','b'])
  • ​核心属性​​:

    属性

    说明

    示例

    df.index

    行索引

    Index(['a','b'])

    df.columns

    列名

    Index(['姓名','年龄','城市'])

    df.shape

    表格形状

    (2,3)

    df.dtypes

    每列数据类型

    姓名:object, 年龄:int64...

    df.values

    二维数组

    array([['张三',25,'北京'],...])


二、Series常用操作详解

​1. 统计方法​​:

s = pd.Series([3, 5, 2, 4, 4, 3])s.mean()        # 平均值 → 3.5
s.median()      # 中位数 → 3.5
s.mode()        # 众数 → [3,4]
s.std()         # 标准差 → 1.048
s.min()         # 最小值 → 2
s.argmax()      # 最大值位置 → 1
s.value_counts()# 值计数 → 4:2, 3:2, 2:1
s.describe()    # 描述性统计(计数/均值/标准差/四分位等)

​2. 布尔索引​​:

# 筛选大于平均值的元素
s[s > s.mean()]  # → [5,4,4]# 多条件筛选(&代替and,|代替or)
s[(s > 2) & (s < 5)]  # → [3,4,4,3]

​3. 向量化运算​​:

s * 2            # 所有元素乘2 → [6,10,4,8,8,6]
s + pd.Series([10,20], index=[0,1]) # 索引对齐运算 → [13,25,NaN,NaN...]
np.log(s)        # 应用NumPy函数

三、DataFrame常用操作详解

​1. 数据选取​​:

# 列选取
df['姓名']        # 获取单列 → Series
df[['姓名','年龄']] # 多列 → DataFrame# 行选取
df.loc['a']       # 按索引选行 → Series
df.iloc[0]        # 按位置选行 → Series
df[0:1]           # 切片选行 → DataFrame# 单元格选取
df.at['a','年龄']   # 25(快速访问标量)
df.loc['a','城市']  # '北京'

​2. 布尔索引​​:

# 筛选北京居民
df[df['城市'] == '北京'] # 复合条件(年龄>25且来自上海)
df[(df['年龄'] > 25) & (df['城市'] == '上海')]

​3. 统计方法​​:

df.mean()         # 每列均值(数值列)
df.max()          # 每列最大值
df.idxmax()       # 最大值所在行索引
df.corr()         # 列间相关系数矩阵
df['年龄'].corr(df['分数']) # 两列相关系数

四、数据结构更改指南

​1. 索引操作​​:

# 设置索引
df.set_index('姓名', inplace=True) # 设置姓名列为索引# 重置索引
df.reset_index(drop=True) # 删除原索引(不保留)# 重命名索引/列名
df.rename(index={'张三':'员工1'}, columns={'年龄':'Age'})

​2. 列操作​​:

# 添加新列
df['薪资'] = [15000, 18000] # 删除列
df.drop('城市', axis=1, inplace=True)# 插入列(在位置1插入)
df.insert(1, '部门', ['技术部','市场部'])

​3. 数据类型转换​​:

df['年龄'] = df['年龄'].astype(float)  # 转为浮点型
pd.to_datetime(df['日期列'])            # 转为日期类型

五、数据导入导出大全

​1. CSV文件​​:

# 读取(含参数详解)
df = pd.read_csv('data.csv', encoding='utf-8',   # 编码格式index_col=0,        # 指定索引列na_values=['NA'])   # 缺失值标识# 保存(含参数详解)
df.to_csv('output.csv', index=False,       # 不保存索引encoding='gbk',   # 中文编码columns=['姓名','年龄']) # 只存指定列

​2. Excel文件​​:

# 读取(需安装openpyxl)
df = pd.read_excel('data.xlsx', sheet_name='Sheet1',header=0)       # 第一行为列名# 保存(需安装xlsxwriter)
df.to_excel('output.xlsx', sheet_name='结果',float_format='%.2f')  # 浮点数格式

​3. Pickle文件(Python专用)​​:

# 保存(保留数据类型)
df.to_pickle('data.pkl') # 读取
df = pd.read_pickle('data.pkl')

​4. 其他格式​​:

# SQL数据库
from sqlalchemy import create_engine
engine = create_engine('sqlite:///mydb.db')
pd.read_sql('SELECT * FROM table', engine)# JSON格式
df.to_json('data.json', orient='records')
pd.read_json('data.json')

💡 关键要点总结

  1. ​数据结构选择​​:

    • 单列数据 → Series

    • 多列表格 → DataFrame

  2. ​数据处理黄金法则​​:

    # 替代循环的向量化操作(速度快100倍)
    df['新列'] = df['列1'] * 2 + df['列2']
  3. ​性能优化技巧​​:

    • 读取大文件时使用 chunksize参数分块处理

    • 减少 inplace=True的使用(创建副本更安全)

    • 使用 category类型处理有限个数的字符串列(节约内存)

  4. ​最佳实践​​:

    # 标准化数据处理流程
    df = (pd.read_csv('raw_data.csv').rename(columns=str.lower)    # 列名小写.dropna(subset=['关键列'])     # 删除关键列缺失行.reset_index(drop=True)       # 重置索引.astype({'年龄':'int'}))      # 类型转换

​注​​:所有代码示例建议在Jupyter Notebook中运行测试,实践中学习效果最佳!

http://www.dtcms.com/a/335072.html

相关文章:

  • 主从复制+哨兵
  • 移动互联网发展战略
  • Altium Designer 22使用笔记(7)---网表导入,叠层设置
  • Spring框架(IOC)
  • 程序设计|C语言教学——C语言基础4:进阶
  • TOGAF八步一法笔记2
  • day42_2025-08-16
  • TDengine 3.3.7.0 版新功能(BLOB 数据类型)
  • ZYNQ QSPI控制器说明
  • JIT 编译与解释执行机制:Java 性能加速的幕后引擎
  • Linux软件编程-线程(2)
  • Python训练营打卡 DAY 38 Dataset和Dataloader类
  • 《代码重生:杨蓉与62.webp》
  • PowerShell中搜索文件夹
  • 国内代理IP在SEO行业中的应用
  • 云安全 - The Big IAM Challenge
  • 低代码平台能力框架:可复用组件与复杂业务的实现机制
  • 现金流预测模型:12个月精准计算指南
  • 嵌入式硬件篇---电感本质
  • Tomcat架构深度解析:从Server到Servlet的全流程揭秘
  • 【数据分享】上市公司供应链成本分摊数据(2007-2024)
  • 使用Python的defaultdict处理字典中的缺失键
  • C++设计模式:面向对象设计原则
  • 肖臻《区块链技术与应用》第20-22讲 - 以太坊难度调整、权益证明和智能合约
  • Java:File类、递归、字符集、IO流体系及Commons-io框架
  • MySQL锁机制:悲观锁VS乐观锁详解
  • 关于“卷积“
  • 《智能体(Agent)速记指南》
  • Linux进程概念(四)环境地址变量
  • 算法第四十六天:动态规划part13(第九章)