Python常用技巧汇总(持续更新)

Counter 函数 -> 计数

from collections import Counter
nums = [1, 2, 5, 1, 2, 5, 6, 3, 3]
print(Counter(nums).items())

结果

strip(), lstrip()和rstrip() remove()

strip()删首尾
lstrip()删首
rstrip()删尾
remove()删首个

一张Matplotlib图 各部分的名称

anatomy-matplotlib

在jupyter notebook的cell中末尾加‘\’可以换行继续写

对过长的语句简直是神器

eval()

让字符串去掉双引号(在变量名,改输入为原始值时很好用)

窗口函数rolling()

自建数据:

import pandas as pd
df = pd.DataFrame({"a": [10, 20, 10, 60, 40, 20, 50]})
df

输出:

a
010
120
210
360
440
520
650

下进行如下操作:
b: 逐三行求和
c: 逐三行求和并放置在中间行(两行的中间行是靠下的那个)
d: 逐三行求最大
e: 逐三行求最小
f: 逐三行求均值

df['b'] = df['a'].rolling(3).sum()
df['c'] = df['a'].rolling(3, center=True).sum()
df['d'] = df['a'].rolling(3).max()
df['e'] = df['a'].rolling(3).min()
df['f'] = df['a'].rolling(3).mean()
df

输出结果:

abcdef
010NaNNaNNaNNaNNaN
120NaN40.0NaNNaNNaN
21040.090.020.010.013.333333
36090.0110.060.010.030.000000
440110.0120.060.010.036.666667
520120.0110.060.020.040.000000
650110.0NaN50.020.036.666667

format string

避免重复书写的好帮手。

labels = ["{0} - {1}".format(i, i + 9) for i in range(0, 100, 10)]
labels

输出:
[‘0 - 9’,
‘10 - 19’,
‘20 - 29’,
‘30 - 39’,
‘40 - 49’,
‘50 - 59’,
‘60 - 69’,
‘70 - 79’,
‘80 - 89’,
‘90 - 99’]

格式二:

[f'x is {x}' for x in range(10) ]

输出:
[‘x is 0’,
‘x is 1’,
‘x is 2’,
‘x is 3’,
‘x is 4’,
‘x is 5’,
‘x is 6’,
‘x is 7’,
‘x is 8’,
‘x is 9’]

一个方框‘[]’是Series, 两个方框‘[[]]’是DataFrame

例如已有如下DataFrame,名字叫‘df’:

abcdef
010NaNNaNNaNNaN
120NaN40.0NaNNaN
21040.090.020.010.0
36090.0110.060.010.0
440110.0120.060.010.0
520120.0110.060.020.0
650110.0NaN50.020.0

取a列:

  • 一个‘[]’:
    在这里插入图片描述

  • 两个‘[[]]’:
    在这里插入图片描述

某个结构后面想用函数可以按‘ tab’键

DadaFrame中取值一般是‘[]’,取函数一般是‘()’

存文件可以考虑pickle或者parquet

在这里插入图片描述
在这里插入图片描述

它是存成二进制文件,读写比csv快。

Catogorical 类别变量

  1. 无序的
    不用举例了吧,猫 啊,狗的,无序。
  2. 有序的

分箱操作

  1. cut()
    在这里插入图片描述
    在这里插入图片描述

  2. qcut()
    在这里插入图片描述

DataFrame自带画图方法,无需导入seaborn或matplotlib

在这里插入图片描述
还可以是这些:
在这里插入图片描述

apply()

  1. Series的apply()
    在这里插入图片描述
  2. DataFrame的apply()
    在这里插入图片描述
    axis=0是index间操作,axis=1是columns间操作
    在这里插入图片描述

每列都统计value_counts()

在这里插入图片描述

按某列排序

在这里插入图片描述

DataFrame迭代

  1. 按列迭代
    在这里插入图片描述
  2. 按行迭代
    在这里插入图片描述

pivot()

在这里插入图片描述

pivot_table()

在这里插入图片描述

在这里插入图片描述

crosstab()

在这里插入图片描述

简化条件语句写法的np.where()

在这里插入图片描述
这个例子中第一个参数是判断条件(if), 如果条件成立,返回第二个参数的内容,如果条件不成立,返回第三个参数的内容。

正则表达式

df['url'] = df['url'].apply(lambda x: re.sub(':4443',':4442',x))

apply默认是行间的操作,这里把每行url列的3替换成了2

关于时间的一些操作

日期有自己的每若干天分割的方法Grouper

在这里插入图片描述
其中频率和返回把每个Grouper中的哪一天作为返回索引都是可选的,具体见官方文档

然后这个是stackoverflow上别人的使用情形。
在这里插入图片描述

groupby和apply组合在一起的一些神操作

  1. 随便生成的随机数据
import pandas as pd
import numpy as np

# 获取随机日期的函数
def random_dates(start, end, n=10):

    start_u = start.value//10**9
    end_u = end.value//10**9

    return pd.to_datetime(np.random.randint(start_u, end_u, n), unit='s')

start = pd.to_datetime('2022-01-01')
end = pd.to_datetime('2022-01-31')
# 获取一个随机DataFrame
df = pd.DataFrame({'time': random_dates(start, end, n=20), 'random': np.random.randn(20)})

df
  1. 输出
    在这里插入图片描述

  2. 秀操作开始

df.groupby(pd.Grouper(key='time',freq='W')).\
        apply(lambda x: pd.DataFrame(x.random.unique()).T)
  1. 解释:
    其中groupby中用了Grouper并且使用了日期自行分割的方法;然后对每个分组使用了一个函数(当然可以是任何函数),这里这个函数返回所有的唯一值,并且转置成横向的方便看。

  2. 输出
    在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值