一文教会pandas

今天的笔试题令我感触很深,回顾一下之前写的都是低代码想想都。。。

anareport[['reportid','anndt','stockid']].drop_duplicates().rolling(window=10,min_periods=1).sum().groupby(['anndt','stockid'])['reportid'].count()
df=anareport[['reportid','anndt','stockid']].drop_duplicates()
pd.crosstab(df['anndt'],df['stockid']).rolling(window=10,min_periods=1).sum().fillna(0)

能看懂以上代码可自行跳过本文,哈哈哈

1、joining and merging

下面是三个数据框:

import pandas as pddf1 = pd.DataFrame({'HPI':[80,85,88,85],'Int_rate':[2, 3, 2, 2],'US_GDP_Thousands':[50, 55, 65, 55]},index = [2001, 2002, 2003, 2004])df2 = pd.DataFrame({'HPI':[80,85,88,85],'Int_rate':[2, 3, 2, 2],'US_GDP_Thousands':[50, 55, 65, 55]},index = [2005, 2006, 2007, 2008])df3 = pd.DataFrame({'HPI':[80,85,88,85],'Unemployment':[7, 8, 9, 6],'Low_tier_HPI':[50, 52, 50, 53]},index = [2001, 2002, 2003, 2004])

用merge合并 

print(pd.merge(df1,df3, on='HPI'))

结果为:

merge 的时候, 会自动忽略索引列. 当然, 我们也可以使用多个列做基准如下:

print(pd.merge(df1,df2, on=['HPI','Int_rate']))

结果:

不共享公共列时, 所以两个列都会保留

可以将其设置成索引:

df4.set_index('HPI', inplace=True)
df4

结果为:

如果在合并之前,有相同的索引列就可以用join了:

df1.set_index('HPI', inplace=True)
df3.set_index('HPI', inplace=True)joined = df1.join(df3)
print(joined)

结果为:

对上述数据稍加修改:

df1 = pd.DataFrame({'Int_rate':[2, 3, 2, 2],'US_GDP_Thousands':[50, 55, 65, 55],'Year':[2001, 2002, 2003, 2004]})df3 = pd.DataFrame({'Unemployment':[7, 8, 9, 6],'Low_tier_HPI':[50, 52, 50, 53],'Year':[2001, 2003, 2004, 2005]})

按照year合并得到:

merged = pd.merge(df1,df3, on='Year')
merged.set_index('Year', inplace=True)
print(merged)

结果为: 

 merge默认取的是交集,这就引出了另一个参数 "how", 通过对这个参数的定义, 可以选择以什么样的方式合并数据. 参数值有以下四种:

Left - 以左边的索引值为准.
Right - 以右边的索引值为准.
Outer - 取并集.
Inner - 取交集

这里展示outer效果:

merged = pd.merge(df1,df3, on='Year', how='outer')
merged.set_index('Year', inplace=True)
print(merged)

结果为:

缺失值直接用NA填充。

此时用join效果和merge一致:

df1.set_index('Year', inplace=True)
df3.set_index('Year', inplace=True)
joined = df1.join(df3, how="outer")
print(joined)

结果为:

2、生成dataframe方式

更多可参考:IO Tools (Text, CSV, HDF5, ...) — pandas 0.22.0 documentation

#读取csv文件:
df = pd.read_csv("/Users/rachel/Downloads/weather.csv")
#读取excel文件:,末尾为sheet参数
df = pd.read_excel("/Users/rachel/Downloads/weather.xlsx", "weather")#字典转换:
weather_data = {'day': ['1/1/2017','1/2/2017','1/3/2017'],'temperature': [32,35,28],'windspeed': [6,7,2],'event': ['Rain', 'Sunny', 'Snow']}
df = pd.DataFrame(weather_data)#元组转换:
weather_data = [('1/1/2017',32,6,'Rain'),('1/2/2017',35,7,'Sunny'),('1/3/2017',28,2,'Snow')]
df = pd.DataFrame(data=weather_data, columns=['day','temperature','windspeed','event'])#列表转换:
weather_data = [{'day': '1/1/2017', 'temperature': 32, 'windspeed': 6, 'event': 'Rain'},{'day': '1/2/2017', 'temperature': 35, 'windspeed': 7, 'event': 'Sunny'},{'day': '1/3/2017', 'temperature': 28, 'windspeed': 2, 'event': 'Snow'},]
df = pd.DataFrame(data=weather_data, columns=['day','temperature','windspeed','event'])#自行指定列名生成数据框
df=pd.DataFrame(columns=['a','b'])

3、缺失值处理

new_df = df.fillna(method='ffill')#参考上一行的值填充
new_df = df.fillna(method='bfill')#参考下一行的值填充
new_df = df.fillna(method='bfill', axis='columns')#横向从右向左填充
new_df = df.fillna(method='ffill', axis='columns')#横向从左向右填充
new_df = df.interpolate()#取空值前后的中间值
new_df = df.dropna()#舍弃所有NA的行
new_df = df.dropna(how='all')#舍弃所有列都为空值的行
new_df = df.dropna(thresh=1)#保留至少有一个列有值的行,thresh=1至少有两个列有值的行
df['value'] = df.groupby('group')['value'].transform(lambda x: x.fillna(x.mean()))# 分组后用组内均值填充NA
df['value'] = df.groupby('group')['value'].transform(lambda x: x.fillna(x.mode()[0]))#分组后用组内众数填充NA值
#补足所缺的日期
dt = pd.date_range('2024-01-01', '2024-11-11')#设置日期范围
idx = pd.DatetimeIndex(dt)#重新定义索引
df = df.reindex(idx)

4、replace函数

new_df = df.replace([-99999, -88888], np.NaN)#用na替代列表中的异常值
new_df = df.replace({'temperature' : -99999,'windspeed':[-99999, -88888],'event': '0'}, np.NaN)#用字典处理每一列中异常值
new_df = df.replace({'temperature': '[A-Za-z]','windspeed': '[A-Za-z]'} ,'', regex=True)#正则表达式+字典处理每一列值格式df = pd.DataFrame({'score': ['exceptional', 'average', 'good', 'poor', 'average', 'exceptional'],'student': ['rob', 'maya', 'jorge', 'tom', 'july', 'erica']})
new_df = df.replace(['poor', 'average', 'good', 'exceptional'], [1, 2, 3, 4])#指代功能

5、用pivot table做格式转换

import akshare as ak
code_list = ['000001','000002','000004','000005','000006','000007','000008']
df = pd.DataFrame(columns = ['date','code','open','high','low','close','volume'])
for code in code_list:data = ak.stock_zh_a_hist(code, period="daily", start_date = '20231214', end_date = '20231219', adjust="qfq")data = data[['日期','开盘','最高','最低','收盘','成交量']]# 选取日期、高开低收价格、成交量数据data = data.rename(columns={'日期': 'date','开盘': 'open','最高': 'high','最低': 'low','收盘': 'close','成交量':'volume'})data['code'] = codedf = pd.concat([df,data])
print(df)

原来:

格式转换:#格式转换, 设置 'date' 为索引列, 也就让'date' 做每一行的输出依据, 然后设置'code' 为每一列输出的依据,输出值为close

df.pivot(index='date', columns='code', values='close')

不指定输出值:

df.pivot(index='date', columns='code')

用 pivot table 来做整合:

df.pivot_table(index='date', columns='code', values='close')

对于 pivot_table() 函数, 可以通过第三个参数 'aggfun' 来做很多的变化:

适用于:如果某个变量在同一时刻有多个值:(上海在同一天温度有多个值,我需要统计)

df.pivot_table(index='city', columns='date', aggfunc='sum')#取和
df.pivot_table(index='city', columns='date', aggfunc='count')#计数
df.pivot_table(index='city', columns='date', aggfunc='diff')#求差异
df.pivot_table(index='city', columns='date', aggfunc='mean')#求均值
df.pivot_table(index='city', columns='date', margins=True)#横向纵向分别求和的平均值

6、group by 用法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/233220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

构建高效持久层:深度解析 MyBatis-Plus(02)

目录 引言1. 逻辑删除1.1 概述1.2 逻辑删除的优势1.3.为什么使用逻辑删除1.4 综合案例 2. 乐观锁和悲观锁2.1.什么是乐观锁和悲观锁2.2.乐观锁和悲观锁的区别2.3.综合案例 3. 分页插件总结 引言 在现代软件开发中,数据库操作是不可或缺的一环。为了提高系统的性能、…

awk统计日志

部分日志文本格式内容 [2023-12-18 22:40:52.301][INFO ][221][com.excellent.common.core.security.filter.UrlRedirectFilter.doFilter:131] ----------------->>> 请求进入拦截器,IP:14.111.199.218, CLIENT:ANDROID&#xff0c…

避坑指南:uni-forms表单在uni-app中的实践经验

​🌈个人主页:前端青山 🔥系列专栏:uni-app篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:uni-app中forms表单的避坑指南篇 该篇章已被前端圈子收录,点此处进入即可查看更多优质内…

计算机网络考研辨析(后续整理入笔记)

文章目录 体系结构物理层速率辨析交换方式辨析编码调制辨析 链路层链路层功能介质访问控制(MAC)信道划分控制之——CDMA随机访问控制轮询访问控制 扩展以太网交换机 网络层网络层功能IPv4协议IP地址IP数据报分析ICMP 网络拓扑与转发分析(重点…

阶段十-springsecurity总结

jwt认证流程 SpringSecurity 认证过程 第一步: 创建一个类实现UserDetailsService接口,重写其中的方法 通过重写 public UserDetails loadUserByUsername(String username) 方法 从数据库校验用户输入的用户名 配置SecurityConfig Bean注入 Passwor…

类中成员函数及普通函数地址获取方式

文章目录 代码准备测试演示注意事项成员函数类型申明测试演示总的打印输出 代码准备 头文件:Calc.h #pragma onceclass Calc { public:int add(int,int);//函数声明static int sub(int,int);//函数声明 public:int b;//定义了一个成员变量static int a;//声明了一个静态成员变…

SG3524控制的恒流源电路图

SG3524简介 SG3524是开关电源脉宽调制型控制器。应用于开关稳压器,变压器耦合的直流变换器,电压倍增器,极性转换器等。采用固定频率,脉冲宽度调制(脉宽调制)技术。输出允许单端或推挽输出。芯片电路包括电…

lvs负载均衡

lvs负载均衡群集 群集 特点:由多台主机构成,都干同一件事,对外显示一个整体 企业集群分类 负载均衡群集高可用群集高性能运算群集 负载均衡群集(LB) 负载均衡的作用 提高应用系统的响应能力可以处理更多的访问请…

Bifrost 中间件 X-Requested-With 系统身份认证绕过漏洞复现

0x01 产品简介 Bifrost是一款面向生产环境的 MySQL,MariaDB,kafka 同步到Redis,MongoDB,ClickHouse等服务的异构中间件 0x02 漏洞概述 Bifrost 中间件 X-Requested-With 存在身份认证绕过漏洞,未经身份认证的攻击者可未授权创建管理员权限账号,可通过删除请求头实现身…

动态加载库

no_mangle 不要改标识符 首先是认识这个标注:mangle,英文的含义“撕裂、碾压”。我第一次把这个单次误以为是manage,说实话两个单词还挺像的。 RUS中函数或静态变量使用#[no_mangle]这个标注属性后,编译器就不会修改它们的名字了…

Home Assistant 如何开启SSH服务

环境: Home Assistant 11.2 SSH & Web Terminal 17.0 问题描述: Home Assistant 如何开启SSH服务 解决方案: 通过添加一个名为Terminal & SSH的插件来在 Home Assistant 中启用 SSH 服务 下面是启用 SSH 服务的大致步骤&#x…

C++第一讲之初入C++

注:本文是对于学完C语言再学C同学的讲解,主要补充C与C语言不同之处,如果你没学过C语言,不建议观看本文。 一.C简介 我们都知道C语言是过程性语言(强调的是实现过程),即对计算机语言要处理的两…

计算机组成原理(存储器的校验)

存储器的校验 说到存储器的校验就是海明码(汉明码),这种题型有两种: 1.编码问题:根据要传送的二进制代码来确定其对应的海明码(汉明码) 2.检错问题:已知收到的汉明码,…

【Linux】Linux运维基础

Linux简介: Linux是一个开源的操作系统内核,最初由Linus Torvalds创建。它通常与GNU工具一起使用,以创建一个完整的操作系统。Linux操作系统有许多基于内核的发行版,如Ubuntu、CentOS、Debian等,每个发行版都有其独特的…

深度学习中常见的激活函数

前文介绍 我们在前面了解到了线性回归模型,其实我们可以把线性回归看成一个单个的神经元,它实际上就完成了两个步骤 1.对输入的特征的加权求和 2.将结果通过传递函数(或者激活函数)输出 这里我们提到了传递函数(或者…

HarmonyOS4.0从零开始的开发教程18后台代理提醒

HarmonyOS(十六)后台代理提醒 简介 随着生活节奏的加快,我们有时会忘记一些重要的事情或日子,所以提醒功能必不可少。应用可能需要在指定的时刻,向用户发送一些业务提醒通知。例如购物类应用,希望在指定时…

PDF天花板工具 你值得拥有

今天带来的推送是PDF文档阅读器的鼻祖——Adobe 的 Arcobat。 Adobe Acrobat 是由Adobe公司开发的一款PDF(Portable Document Format,便携式文档格式)编辑软件。借助它,您可以以PDF格式制作和保存你的文档 ,以便于浏览…

MATLAB 点云中心化 (40)

MATLAB 点云中心化 一、算法介绍二、算法实现一、算法介绍 使用点云集合中的坐标计算质心,这里将其作为中心,将每个点坐标减去该中心坐标,即可得到中心化的点云,这在很多处理中是必须进行的一个步骤:相当于点云移动到以质心为原点的坐标系 (主要是计算质心和点云偏移两个…

【Maven-Helper】利用 Maven-Helper 解决依赖冲突问题

【Maven-Helper】利用 Maven-Helper 解决依赖冲突问题 1)安装 Maven-Helper 插件2)Maven Helper 插件使用方法3)Idea-Maven 可视化依赖树 1)安装 Maven-Helper 插件 这里我们已经安装过了,如果没有安装过,点…

透视表美化——将透视表个别错误值去掉/取消自动更新表宽

1.问题:做透视表时,有时候有个别值求出来是错误值,但是不雅观需要删掉; 2.解决方案 点击数据透视表分析-选项框,将“对于错误值,显示:”选中,可以不填值或者填需要替代的值&#xf…