前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python | 工作笔记 | pandas 常用总结

python | 工作笔记 | pandas 常用总结

作者头像
努力在北京混出人样
发布于 2019-02-18 09:01:08
发布于 2019-02-18 09:01:08
1.1K00
代码可运行
举报
文章被收录于专栏:祥子的故事祥子的故事
运行总次数:0
代码可运行

之前使用pandas处理数据使用的少,最近在实习中经常用到,故自以为把心得总结一番。

说明:有部分是网上查到的案例,觉得很实用,就把它搬过来了。


      • DataFrame的列名
      • concat拼接
      • merge 两个dataframe拼接
      • 计算nan的个数
      • 排序
      • 删除重复记录
      • 使用pandas画图中文显示问题
      • 双坐标轴的图
      • enumerate函数
      • 时间处理
      • 时间转换为周几周月
      • 画图
        • 一个框中框中画多个图
        • 多个子图

1.DataFrame的列名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 方法一:全部修改
df.columns = ['a', 'b', 'c', 'd']
df.columns = df.columns.map(lambda x:x[1:])
df.columns = df.columns.str.strip('$')
## 方法二:可以局部修改
df.rename(columns=('$a': 'a','$e': 'e'}, inplace=True)
df.rename(columns=lambda x:x.replace('$',''), inplace=True)

2.concat拼接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## concat拼接,我常用于处理单个列或行后将数据拼接在一起。
hangye_shouyi_ratio = pd.DataFrame()
for i in range(1,16):
    data_hangye_indexa = hangye_index.iloc[:,i+1].values - hangye_index.iloc[:,i].values
    hangye_shouyi_ratio = pd.concat([hangye_shouyi_ratio,data_hangye_indexa.T],axis=0)

参考网址: http://pandas.pydata.org/pandas-docs/stable/merging.html

3.merge 两个dataframe拼接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 基于关键词"申万一级行业"拼接两个dataframe
pd.merge(hangye_index,chaopei,on='申万一级行业')

4.计算nan的个数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 计算NAN或缺失值的个数
df.isnull().sum(axis=1)
## 计算非NAN或缺失值的个数
df.null().sum(axis=1)

5.排序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 排序,降序
table4.sort_values(by='区间累计涨跌幅',ascending=False)

具体参考:http://www.cnblogs.com/caicaihong/p/5890239.html

6.删除重复记录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## duplicated
falsei = []
for i,x in enumerate(data_liutong.duplicated(keep = 'first')):
    if x == False:
        falsei.append(i)
data_liutong = data_liutong.iloc[falsei,:]
data_liutong.head(10)  

注意keep后面的参数使用。keep=‘frist’:除了第一次出现外,其余相同的被标记为重复。keep=’last’:除了最后一次出现外,其余相同的被标记为重复。keep=False:所有相同的都被标记为重复。 具体参考:http://blog.csdn.net/kancy110/article/details/70142728

7.使用pandas画图:中文显示问题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 建议把这些内容复制过去,可以保证后面有问题的都可以解决掉
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
from matplotlib.pylab import mpl
mpl.rcParams['axes.unicode_minus'] = False  # 解决负号显示异常的问题
my_font = FontProperties(fname=r"C:\\Windows\\fonts\\SimHei.ttf")  # 使用指定中文字体
plt.rc('font', family='SimHei', size=8)

这是我多次尝试后发现的方案,很有效果,强烈推荐使用。

8.双坐标轴的图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 重点:twinx
import matplotlib.pyplot as plt
import numpy as np
plt.clf()  # 清空画布
fig  = plt.figure(figsize=(8,4))


x = pd.date_range('31/3/2013','30/9/2016',freq='3M')
data_stock_hangye_sum_ratio[data_stock_hangye_sum_ratio.index == '计算机'].values[0]

y1 = hangye_index[hangye_index.iloc[:,0] == '计算机'].iloc[:,2:17].values[0]
y2 = data_stock_hangye_sum_ratio[data_stock_hangye_sum_ratio.index == '计算机'].values[0]

ax1 = fig.add_subplot(111)
ax1.plot(x,hangye_index[hangye_index.iloc[:,0] == '计算机'].iloc[:,2:17].values[0])
ax1.set_ylabel('计算机行业指数走势')
ax1.set_title('计算机行业行情走势与基金持仓占比变化')
ax2 = ax1.twinx()

ax2.plot(x,data_stock_hangye_sum_ratio[data_stock_hangye_sum_ratio.index == '计算机'].values[0],'r')
#ax2.set_xlim(x)
ax2.set_ylabel('计算机行业基金持仓占比')
ax2.set_xlabel('时间')

plt.show()

9.enumerate函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for i,x enumerate(data):
   print(i)
   print (x)

得到下标i和数值x

10.时间处理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 先将时间的格式统一处理下,再来转换格式
print (datetime.strptime('2013-03-29 0:00',"%Y-%m-%d %H:%M").strftime("%Y-%m-%d"))

11.时间转换为周几、周、月

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
from datetime import datetime
cal_date = pd.read_csv("D:\\python\\Scripts\\cal_date.csv")
## 几月
cal_date['month'] = pd.DatetimeIndex(cal_date.calendarDate).month
## 周几
cal_date['day'] = pd.DatetimeIndex(cal_date.calendarDate).dayofweek
## 这个月的第几周
cal_date['week'] = pd.DatetimeIndex(cal_date.calendarDate).week

12.画图

一个框中框中画多个图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0., np.e, 0.01)
y1 = np.exp(-x)
y2 = np.log(x)

fig = plt.figure()

ax1 = fig.add_subplot(111)
# ax1 = plt.plot()
ax1.plot(x, y1)
ax1.set_ylabel('Y values for exp(-x)')
ax1.set_title("Double Y axis")

ax2 = ax1.twinx()  # this is the important function
ax2.plot(x, y2, 'r')
ax2.set_xlim([0, np.e])
ax2.set_ylabel('Y values for ln(x)')
ax2.set_xlabel('Same X for both exp(-x) and ln(x)')

plt.show()
多个子图
  • 方式一
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.font_manager as fm
myfont = fm.FontProperties(fname='C:/Windows/Fonts/msyh.ttc')
import matplotlib.pyplot as plt
import numpy as np
plt.rc('font', family='SimHei', size=8)
import matplotlib.pyplot as plt

### 第一张图
plt.clf()  # 清空画布
plt.figure(figsize=(16,64),dpi=80) 

plt.subplot(8,2,1)
plt.pie(data_stock_hangye_sum_ratio.mean(axis = 1).values,labels=labels,autopct='%1.1f%%',shadow=False, startangle=90,pctdistance = 1.06)
plt.ylabel("基金重仓持股行业平均占比情况(2013Q1-2016Q3)",fontproperties=myfont)

# 第二张图
for i in range(len(date)):
    numbers = int(i + 2)
    plt.subplot(8,2,numbers)
    plt.pie(data_stock_hangye_sum_ratio.iloc[:,i].values,labels=labels,
            autopct='%1.1f%%',shadow=False, startangle=90,pctdistance = 1.06)
    #plt.xlabel("基金重仓持股行业平均占比情况(2013Q1-2016Q3)",fontproperties=myfont)
    plt.ylabel("基金重仓持股行业平均占比情况 "+ date[i],fontproperties=myfont)

plt.show()
  • 方式二
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt
import numpy as np
import numpy.random as rnd


def f(t):
    s1 = np.sin(2 * np.pi * t)
    e1 = np.exp(-t)
    return np.absolute((s1 * e1)) + .05

t = np.arange(0.0, 5.0, 0.1)
s = f(t)
nse = rnd.normal(0.0, 0.3, t.shape) * s

fig = plt.figure(figsize=(12, 6))
vax = fig.add_subplot(121)
hax = fig.add_subplot(122)

vax.plot(t, s + nse, '^')
vax.vlines(t, [0], s)
vax.set_xlabel('time (s)')
vax.set_title('Vertical lines demo')

hax.plot(s + nse, t, '^')
hax.hlines(t, [0], s, lw=2)
hax.set_xlabel('time (s)')
hax.set_title('Horizontal lines demo')

plt.show()

总结:把常用的总结出来,方便自己使用。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年09月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Uniswap V2 学习笔记2. 交易算法
大家好, 今天继续分享 Uniswap V2 的学习心得, 今天的内容是 Uniswap[2]的交易算法
Tiny熊
2022/05/25
1.9K0
UniswapV2协议解析
本篇文章主要对Uniswap V2协议的工作原理、项目构成、源码实现等部分进行详细解读。
Al1ex
2021/07/21
3.6K2
UniswapV2协议解析
剖析DeFi交易产品之Uniswap:V2上篇
在 DeFi 赛道中,DEX 无疑是最核心的一块,而 Uniswap 又是整个 DEX 领域中的龙头,如 SushiSwap、PancakeSwap 等都是 Fork 了 Uniswap 的。虽然网上关于 Uniswap 的文章已经挺多,但大多都只是从机制上进行介绍,很少谈及具体实现,也存在一些问题没能解答,比如:手续费分配是如何实现的?最优路径是如何得出的?TWAP 怎么用?注入流动性时返回多少 LP Token 是如何计算的?因此,我从代码层面去剖析 Uniswap,搞清楚这些问题,同时也对 Uniswap 从整体到细节都有所理解。
Keegan小钢
2021/08/20
1.7K0
pancakeSwapV2交易手续费实现原理
在 Uniswap V2 中,会对每次交易收取手续费。具体来说,Uniswap V2 对每笔交易收取 0.3% 的手续费。这些手续费的分配如下:
终有链响
2024/12/11
1590
IDO预售代币合约系统开发技术说明及源码分析
Core逻辑实现了单个交易对的逻辑。通过UniswapV2Factory可以创建一个个Pair(交易池)。每个具体实现逻辑在UniswapV2Pair中。
DD_MrsFu123
2022/08/02
7780
IDO代币预售合约系统开发技术详细
Uniswap智能合约代码由两个github项目组成。一个是core,一个是periphery。
DD_MrsFu123
2022/08/02
7760
剖析DeFi交易产品之Uniswap:V2下篇
上篇我们主要讲了 UniswapV2 整体分为了哪些项目,并重点讲解了 uniswap-v2-core 的核心代码实现;中篇主要对 uniswap-v2-periphery 的路由合约实现进行了剖析;现在剩下 V2 系列的最后一篇,我会介绍剩下的一些内容,主要包括:TWAP、FlashSwap、质押挖矿。
Keegan小钢
2021/10/20
1.7K0
剖析DeFi交易产品之Uniswap:V2下篇
SushiSwap协议分析
SushiSwap是一个分叉自Uniswap的去中心化交易协议,它在交易模式上延续了Uniswap的核心设计——AMM(自动做市商)模型,但与Uniswap不同之处在于SushiSwap增加了经济奖励模型,SushiSwap交易手续费为0.3%,其中0.25%直接分给发给流动性提供,0.05%买成SUSHI并分配给Sushi代币持有者(Uniswap是通过开关模式决定是否将0.05%的手续费给开发者团队),Sushi在每次分发时会预留10%给项目未来开发迭代及安全审计等。
Al1ex
2021/07/21
2.2K0
SushiSwap协议分析
LP流动性挖矿系统开发(详细讲解)丨LP流动性质押开发(逻辑分析)
core偏核心逻辑,单个swap的逻辑。periphery偏外围服务,一个个swap的基础上构建服务。单个swap,两种代币形成的交易对,俗称“池子”。每个交易对有一些基本属性:reserve0/reserve1以及total supply。reserve0/reserve1是交易对的两种代币的储存量。total supply是当前流动性代币的总量。每个交易对都对应一个流动性代币(LPT-liquidity provider token)。简单的说,LPT记录了所有流动性提供者的贡献。所有流动性代币的总和就是total supply。Uniswap协议的思想是reserve0*reserve1的乘积不变。
系统_I8O28578624
2022/12/09
1K0
剖析DeFi交易产品之Uniswap:V2中篇
上篇我们主要讲了 UniswapV2 整体分为了哪些项目,并重点讲解了 uniswap-v2-core 的核心代码实现。这篇我们来看看 uniswap-v2-periphery。
Keegan小钢
2021/10/08
2.7K0
UniSwap V3协议浅析(下)
NoDelegateCall合约的主要功能是提供一个修饰器来阻止对使用修饰器修饰过的函数进行delegatecall调用,合约代码如下:
Al1ex
2021/07/21
2.5K0
UniSwap V3协议浅析(下)
一文讲清-NFT市场新秀SudoSwap的AMM机制-创新挑战与局限
NFT交易市场的近期颓势频现,整个市场的流动性大幅降低,而此时8月异军突起的SudoSwap则凭借一超多强的增长数据,让基于AMM机制的交易市场映入大众视野。
十四君
2023/02/20
7550
一文讲清-NFT市场新秀SudoSwap的AMM机制-创新挑战与局限
这几天我写了一个DEX交易聚合器
目前,DeFi 赛道中,专门做 DEX 交易聚合的产品挺多的,以下是其中一些平台:
Keegan小钢
2021/07/23
1.7K0
这几天我写了一个DEX交易聚合器
使用带有存储证明的Uniswap V2 预言机
在本文中,我们将讨论“价格累积预言机”的工作原理和使用方法。并且我们将介绍一个可将预言机集成到你自己以太坊项目中的 Solidity 库。本文将假设你对 Uniswap 此类恒定乘积市场有深入的了解。如果你不清楚下面即将讨论的定价机制,请从这篇[优秀]的 Uniswap 文档[5]开始。
Tiny熊
2023/01/09
1.2K0
使用带有存储证明的Uniswap V2 预言机
剖析DeFi交易产品之UniswapV3:工厂合约
UniswapV3Factory 合约主要用来创建不同代币对的流动性池子合约,其代码实现并不复杂,以下就是代码实现:
Keegan小钢
2023/11/07
3560
剖析DeFi交易产品之UniswapV3:工厂合约
Uniswap V3 释疑: 集中流动性, 无常损失和滑点
Uniswap 协议是一组原生的 ETH 的智能合约,它可以实现 ERC20 代币与 ERC20 代币的交换, 以及 ERC20 代币与 ETH 之间的的交换。
Tiny熊
2023/01/09
2K0
使用Uniswap V2部署自己的去中心化交易所
Dapp链接:https://www.chainpip.com/dapp-view/6724
fingernft
2022/10/24
1.4K0
使用Uniswap V2部署自己的去中心化交易所
uniswap的工作原理(下)
市场价格=池子里DAI的数量/池子里ETH的数量(P市场=X/Y)。假设市场数量趋近于无穷大,兑换价格无限趋近于X/Y
用户7976544
2020/11/14
2.6K1
uniswap的工作原理(下)
如何把Uniswap v2作为预言机使用
Uniswap 是目前最流行的去中心化交易所,估计大家读已经了解它, 但我还是先把基础知识再过一遍。
Tiny熊
2021/02/25
1.8K0
如何把Uniswap v2作为预言机使用
uniswap的工作原理(上)
你吃过天上掉下的馅饼吗?只要你在2020年的9月1号之前在uniswap交易所进行过任何一笔操作,就可以获得400的uni币。这个消息刚出的时候uni价值3美元,后续最高峰涨到了8.7美元。也就是说只要你进行了一笔交易,就能获得8k~2w人民币不等的奖励。
用户7976544
2020/11/14
1.8K0
uniswap的工作原理(上)
相关推荐
Uniswap V2 学习笔记2. 交易算法
更多 >
LV.0
珠海市登链科技有限公司CTO
目录
  • 1.DataFrame的列名
  • 2.concat拼接
  • 3.merge 两个dataframe拼接
  • 4.计算nan的个数
  • 5.排序
  • 6.删除重复记录
  • 7.使用pandas画图:中文显示问题
  • 8.双坐标轴的图
  • 9.enumerate函数
  • 10.时间处理
  • 11.时间转换为周几、周、月
  • 12.画图
    • 一个框中框中画多个图
    • 多个子图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档