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

6-pandas数据读取


前言


一、分组聚合

1.groupby使用:

groupby() 是 pandas 库中用于对数据进行分组操作的一个非常重要的方法。

import pandas as pddata = {'城市': ['北京', '上海', '广州', '北京', '上海', '广州'],'人口': [2154, 2424, 1303, 2154, 2424, 1303],'年龄': [25, 30, 35, 25, 30, 35],'收入': [5000, 6000, 7000, 5000, 6000, 7000]}df2 = pd.DataFrame(data)# 计算每个城市的平均年龄 
df2.groupby('城市')['年龄'].mean()# 每个城市的平均收入
df2.groupby('城市')['收入'].mean()# 计算每个城市的总人口
df2.groupby('城市')['人口'].sum()

2. agg方法:

(1)单个函数聚合----如果你只想对某一列应用一个函数,可以直接传递该函数的名字或函数对象给 agg 方法:

eg:agg({'金额': 'sum'})

(2)多个函数聚合----如果你想对某一列应用多个函数,可以传递一个列表给 agg 方法。

eg:agg({'金额': ['sum', 'mean']})

(3)不同的列不同函数----如果你希望对不同的列应用不同的聚合函数,可以在 agg 方法中传入一个字典,字典的键是列名,值是函数或函数列表。

eg:agg({'金额': 'sum', '订单号': 'count'})

data = {'UserId': [101, 102, 103, 104, 105],'Date': ['2023-10-01', '2023-10-01', '2023-10-02', '2023-10-03', '2023-10-03'],'Product': ['笔记本', '鼠标', '键盘', '笔记本', '显示器'],'Quantity': [2, 5, 3, 1, 2],'Amount': [2000, 50, 150, 1000, 400]
}
df3 = pd.DataFrame(data)# 每个产品的销售总额和销售量
df3.groupby('Product').agg({'Amount':'sum','Quantity':'sum'})# 每个用户下单的最早日期和最晚日期
df3.groupby('UserId')['Date'].agg(['min','max'])

二、透视表pivot_table()

透视表用来进行数据汇总和分析

1.引入库

代码如下(示例):

data = {'订单日期': pd.date_range(start='2023-01-01', periods=12, freq='M'),'产品类别': ['电子产品', '家居用品', '服装', '电子产品', '家居用品', '服装', '电子产品', '家居用品', '服装', '电子产品', '家居用品', '服装'],'销售额': [5000, 3000, 2000, 5500, 3200, 2200, 6000, 3500, 2300, 5200, 3100, 2100]
}
df4 = pd.DataFrame(data)# 统计每个月不同产品的销售额
import numpy as nppd.pivot_table(df4,values='销售额',columns='产品类别',index=df4['订单日期'].dt.strftime('%Y %m'),aggfunc=np.sum,fill_value=0)

2.提取日期dt.strftime()

获取年月

代码如下(示例):

df4['订单日期'].dt.strftime('%Y %m')

3.

三、文件读取

1.read_csv

pd.read_csv(r'C:\Users\B\Desktop\数据源\exa5.csv',encoding='ANSI')

pd.read_csv(r'C:\Users\B\Desktop\数据源\exa5.csv',encoding='gbk')  # encoding='gbk'设置编码方式

path = r'C:\Users\B\Desktop\数据源\exa5.csv'
pd.read_csv(path,sep='\t',encoding='gbk')

(1)表头设置header

pd.read_csv(path,header=0,encoding='gbk')

(2)设置索引列index_col

pd.read_csv(path,index_col=0,encoding='gbk')  # 设置列名下标为0的列,作为索引列

pd.read_csv(path,index_col='股票2',encoding='gbk')

(3)使用哪些列use_cols

pd.read_csv(path,usecols=[0,4,5],encoding='gbk')

(4)日期转换parse_dates

df6 = pd.read_csv(path,parse_dates=['日期'],encoding='gbk')

2.读取文本内容read_table

df8 = pd.read_table(r'C:\Users\B\Desktop\数据源\exa2.txt',sep='\s+') # sep='\s+' 凡是有空格的地方就分割


3.大文件读取

chunksize=1000设置块的大小

df9 = pd.read_csv(r'C:\Users\B\Desktop\数据源\exa5.csv',chunksize=1000,encoding='gbk') # chunksize=1000设置块的大小
data = pd.DataFrame([])
for chunk in df9:chunk = pd.DataFrame(chunk)data = pd.concat([data,chunk])

4.Excel文件读取read_excel 

# excel工作薄里有多张表时,要使用sheet_name读取指定表
df10 = pd.read_excel(r'C:\Users\B\Desktop\数据源\exa10.xlsx',sheet_name='股票')df11 = pd.read_excel(r'C:\Users\B\Desktop\数据源\exa10.xlsx',sheet_name='评论')

5.html数据读取read_html 

df11 = pd.read_html('https://www.air-level.com/rank')[0]
df12 = pd.read_html('https://vip.stock.finance.sina.com.cn/q/go.php/vComStockHold/kind/jgcg/index.phtml')[0]
 

lst = []
for i in range(1,3):url = f'https://vip.stock.finance.sina.com.cn/q/go.php/vComStockHold/kind/jgcg/index.phtml?p={i}'df = pd.read_html(url)[0]lst.append(df)
data = pd.concat(lst,ignore_index=True)

四、文件保存

保存为csv格式 to_csv

df7.to_csv('test.csv')

df7.to_excel('test2.xls')

df7.to_excel('test2.xlsx',index=False)

data.to_html('hehe.html')

五、拓展

1.内容提取str.extract()

通过正则提取字母

data = {'info': ['John 25', 'Lucy 30', 'Bob 28']}
df7 = pd.DataFrame(data)df7['name'] = df7['info'].str.extract(r'(\w+)')

2.str属性 

data = {'姓名': ['lily Smith', 'lucy Johnson', 'jack Brown', 'tom Lee'],'入职日期': ['2022-05-15', '2020-10-01', '2019-07-20', '2023-03-10']}
df = pd.DataFrame(data)# 提取【姓名】里的名
df['姓名'].str.split(' ')[0]#结果['lily', 'Smith']df['姓名'].str.split(' ').str[0]  # 批量定位到单元格内部,通过下标取值'''
结果
0    lily
1    lucy
2    jack
3     tom
Name: 姓名, dtype: object
'''# 提取入职年份
df['入职日期'].str[:4]


总结

http://www.lryc.cn/news/512220.html

相关文章:

  • 【Logback详解】
  • Flume的概念和原理
  • 初始nginx
  • vulnhub靶场 Empire LupinOne
  • 6-Gin 路由详解 --[Gin 框架入门精讲与实战案例]
  • 使用Lodash工具库的orderby和sortby进行排序的区别
  • CSS面试题|[2024-12-24]
  • flask-admin 在modelview 视图中重写on_model_change 与after_model_change
  • Excel粘贴复制不完整的原因以及解决方法
  • 【深度学习环境】NVIDIA Driver、Cuda和Pytorch(centos9机器,要用到显示器)
  • Cocos Creator 3.8.5 正式发布,更小更快更多平台!
  • Python中构建终端应用界面利器——Blessed模块
  • Android 15 状态栏闹钟图标不显示问题修复
  • 数据采集背后的效率革命:如何优化你的爬虫性能
  • 【Compose multiplatform教程06】用IDEA编译Compose Multiplatform常见问题
  • 《计算机组成及汇编语言原理》阅读笔记:p128-p132
  • 使用 OpenCV 在图像中添加文字
  • 实现某海外大型车企(T)Cabin Wi-Fi 需求的概述 - 4
  • Linux系统:内核态与用户态的深层思考
  • # 光速上手 - JPA 原生 sql DTO 投影
  • ASP.NET Web应用程序出现Maximum request length exceeded报错
  • HTML——16.相对路径
  • windows 默认的消息ID有那些---我与大模型对话
  • CSV vs 数据库:爬虫数据存储的最佳选择是什么
  • 编译原理学习笔记——CH7-Runtime Environments运行时环境
  • 机器学习DAY7: 特征工程和特征选择(数据预处理)(完)
  • vue3动态加载组件
  • 12.29 redis缓存一致性
  • SqlSugar配置连接达梦数据库集群
  • 评分模型在路网通勤习惯分析中的应用——提出问题(1)