pandas 常用函数与方法汇总

一、pandas常用函数

Series可以运用ndarray或字典的几乎所有索引操作和函数,融合了字典和ndarray的优点。【DataFrame属性查看】

1.1 Series常用属性
函数说明
Series([x,y,…])
Series({‘a’:x,‘b’:y,…}, index=param1)
通过【 list / dict 】构建一个Series
Series.copy()复制一个Series
Series.reindex([x,y,…], fill_value=NaN)
Series.reindex([x,y,…], method=NaN)
Series.reindex(columns=[x,y,…])
重返回一个适应新索引的新对象,将缺失值填充为fill_value
返回适应新索引的新对象,填充方式为method【pad, backfill】(向前填充/向后填充)对列进行重新索引
Series.drop(index)丢弃指定项
Series.map(f)应用元素级函数
排序函数说明
Series.sort_index(ascending=True)根据索引返回已排序的新对象
Series.order(ascending=True)根据值返回已排序的对象,NaN值在末尾
Series.rank(method=‘average’, ascending=True, axis=0)average为各组分配一个平均排名
max,min使用整个分组中的最(大)小排名
first按值在原始数据中出现的顺序排名
df.argmax()
df.argmin()
返回含有最大值的索引位置
返回含有最小值的索引位置
Series.replace
Series.str.replace
对一【列】中字符串替换
对对【列】中字符串替换或批量替换

Series.replaceSeries.str.replace
在字符串操作的上下文中,str.replace默认情况下启用正则表达式替换。replace除非使用此regex=True开关,否则仅执行完全匹配。

import pandas as pd

all = pd.DataFrame(
    {"hero":["达摩","典韦","曹操","钟无艳","墨子","赵云","吕布","孙悟空"],
    "level":["hei_tie_AA","qing_tong_AA","hei_tie_BB","huang_jin_CC",\
    "bai_yin","da_shi_DD","zhuan_shi_SS","wang_zhe_SSS"]})

all["level"] = all.level.str.replace("_BB","_bb").str.replace("_AA","_aa")
all["level_2"] = all.level.replace({'_CC': '_cc', '_DD': '_dd'}, regex=True)
原始数据处理效果
herolevelherolevellevel_2
0达摩hei_tie_AA0达摩hei_tie_aahei_tie_aa
1典韦qing_tong_AA1典韦qing_tong_aaqing_tong_aa
2曹操hei_tie_BB2曹操hei_tie_bbhei_tie_bb
3钟无艳huang_jin_CC3钟无艳huang_jin_CChuang_jin_cc
4墨子bai_yin4墨子bai_yinbai_yin
5赵云da_shi_DD5赵云da_shi_DDda_shi_dd
6吕布zhuan_shi_SS6吕布zhuan_shi_SSzhuan_shi_SS
7孙悟空wang_zhe_SSS7孙悟空wang_zhe_SSSwang_zhe_SSS
1.2 Series.str.func()字符串函数
Series.str.func()函数说明示例:df = pd.Series([“花费_100_元”])
cat()字符串连接,可指定分隔符eg:df['name'].str.cat(df['birthday'], sep=':')
eg:df["cost_name"].str.cat(df["price"].astype("str"),sep="-")
eg:df["unit"]="元"
df["cost_all"] = df["price"].str.cat(df["unit"],sep=":")
split()切分字符串df.str.split('_')
输出:[花费, 100, 元]
get()获取指定位置的字符串
containsSeries.str.contains(pat, case=True, flags=0, na=nan, regex=True)
返回布尔值系列/数组是否给定pattern / regex包含在Series / Index中的每个字符串中。
pat = 字符串 / 正则表达式(regex=True),
case = 布尔值, 默认为True(匹配敏感)
flags= 默认0。
na= 默认为NaN,替换缺失值re.IGNORECASE忽略大小写
regex=布尔值, 默认为True.如果为真则使用re.research,否则使用Python
df = df[df['name'].str.contains(r'.*?中国.*')]
matchSeries.str.match(pat, case=True, flags=0,na=nan,as_indexer=False)
使用传递的正则表达式 查找 Series / Index中每个字符串中的组 。
如果 as_indexer = True,请确定每个字符串是否与正则表达式匹配
re_date = re.compile("\d{4}年\d{1,2}月\d{1,2}日")
df= df.loc[df["birthday"].str.match(re_date)]
extractSeries.str.extract(pat,flags = 0,expand = None)
从正则表达式pat的第一个匹配中 提取 组。
df[['室','厅']] = df['户型'].str.extract('(\d+)室(\d+)厅', expand=False)
join()对每个字符都用给点的字符串拼接起来,不常用df.str.join("-")
输出:花-费-_-1-0-0-_-元
replace()替换
repeat()重复元素df.str.repeat(2)
输出:花费_100_元花费_100_元
pad()(左右)补齐
center()
ljust()
rjust()
中间补齐
右补齐
左补齐
zfill()左边补0
wrap()指定的位置加回车符号
slice()按给点的开始结束位置切割字符串
slice_replace()使用给定的字符串,替换指定的位置的字符df.str.slice_replace(7,8,"$")
输出:花费_100_$
count()计算给定单词出现的次数
startswith()
endswith()
判断是否以某字符串开头/结束df.str.endswith("元")
输出:True
findall()查找所有符合正则的字符,以数组形式返回
extract()抽取匹配的字符串,注意加上括号
len()统计字符串的长度
strip()
rstrip()
lstrip()
去除前后/后面/前面的空白字符
partition()字符串切割称为DataFrame,切割为(分隔符前,分隔符,分隔符后)
rpartition()功能同上。从右切起
lower() / upper()全部小写/大写
find() / rfind()查找给定字符串的所在位置 /从右查起
capitalize()首字符大写
swapcase()大小写互换
isalnum()是否全部是数字和字母组成
isalpha()是否全部是字母
isdigit()是否全部都是数字
isspace()是否空格
islower()
isupper()
是否全部小写/全部大写
istitle()是否只有首字母为大写,其他字母为小写
isnumeric()是否是数字
isdecimal()是否全是数字
map()用于匹配匿名函数df["total"]=df.total.map(lambda x:str(x))
apply()用于匹配函数def sex(x):
  return (1 if x=="男" elso 0)
df['gender'] = df.gender.apply(sex)
1.3 正则

正则测试网站 https://c.runoob.com/front-end/854
在这里插入图片描述
详情:https://blog.csdn.net/wsp_1138886114/article/details/80567587
一般字符、字符集和转义字符

一般字符完全匹配字符abcabc
\转义字符..
.匹配除换行符\n以外的所有字符.q, 1, +, …
[]匹配字符集中任意字符[abc]a, b, c
\s匹配空白字符,即[\n\t\f\r…]a\sba b, a b, …
\S匹配非空白字符a\Sbab, a4b, asb, …
\w匹配单词字符,即[a-zA-Z0-9]a\wcabc, a8c, …
\W匹配非单词字符,即[^a-zA-Z0-9]a\Wca-c, a?c, …
\d匹配数字a\dca3c, …
\D匹配非数字a\Dcadc, a-c, …

限定匹配次数

*匹配前一个字符0到无限次ab*cac, abc, abbc, …
+匹配前一个字符1到无限次ab+cabc, abbc, …
?匹配前一个字符0或1次ab?cac, abc
{m}匹配前一个字符m次ab{3}cabbbc
{m,n}匹配前一个字符m至n次,m省略代表0至n次,n省略代表m至无限次ab{2,3}cabbc, abbbc, …
*? +? ?? {m}? {m,n}?使得*,+,?{m},{m,n}变为非贪婪模式ab*?a

限定边界

$匹配字符串末尾(多行模式下是每一行字符串末尾,re.M)c$abc, 12c, ?-c, …
^匹配字符串开头(多行模式下是每一行字符串开头,re.M)^ccab, c12, c??, …
\A匹配整个字符串开头\Accab, …
\Z匹配整个字符串末尾c\Zabc, …

逻辑、分组

|或,匹配左边或者右边的表达式abc|defabc, def, …
(…)括号内为一组;分组有编号,从1开始算起;分组作为一个整体,|只在分组内部有效;(abc){1}.(123|456)+abc.456, abc.123, …
(?P…)除编号外的另一个分组名
<number>引用编号为的分组匹配的字符串(\d)abc\15abc5, …
(?P=name)引用别名为的分组匹配到的字符串(?P=\d)abc(?P=one)7abc7, …

特殊构造

(?iLmsux)iLmsux每个字符代表一个匹配模式(?!abc)Abc, abc, …
(?#…)#之后的内容作为注释被忽略
(?=…)之后的字符串内容需要匹配表达式,不消耗字符串内容a(?=\d)后面是数字的a
(?!..)之后的字符串内容需要不匹配表达式,不消耗字符串内容a(?!\d)后面不是数字的a
(?<=…)之前的字符串内容需要匹配表达式,不消耗字符串内容(?<=\d)a前面是数字的a
(?<!..)之后的字符串内容需要不匹配表达式,不消耗字符串内容(?<!\d)a前面不是数字的a

2、中文字符集

u"[\u4e00-\u9fa5]"

3、re模块常用方法

compile():编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用

pa = re.compile('et')

正则表达式对象的方法:

group() 返回被 RE 匹配的字符串。
start() 返回匹配开始的位置
end()   返回匹配结束的位置
span()  返回一个元组包含匹配 (开始,结束) 的位置

4、提取字符串
https://www.cnblogs.com/qkloveslife/p/9269553.html

import re

str = "a123b"
print re.findall(r"a(.+?)b",str)
输出['123']

二、DataFrame

DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。
DataFrame可以通过类似字典的方式或者.columnname的方式将列获取为一个Series。行也可以通过位置或名称的方式进行获取。
为不存在的列赋值会创建新列。

>>> del frame['xxx']  # 删除列
属性说明
valuesDataFrame的值
index行索引
index.name行索引的名字
columns列索引
columns.name列索引的名字
ix返回行的DataFrame
ix[[x,y,…], [x,y,…]]对行重新索引,然后对列重新索引
Tframe行列转置
DataFrame常用属性
函数说明
DataFrame(dict, columns=dict.index, index=[dict.columnnum])构建DataFrame
DataFrame(二维ndarray)数据矩阵,还可以传入行标和列标
DataFrame(由数组、列表或元组组成的字典)每个序列会变成DataFrame的一列。所有序列的长度必须相同
DataFrame(NumPy的结构化/记录数组)类似于“由数组组成的字典”
DataFrame(由Series组成的字典)每个Series会成为一列。如果没有显式制定索引,则各Series的索引会被合并成结果的行索引
DataFrame(由字典组成的字典)各内层字典会成为一列。键会被合并成结果的行索引。
DataFrame(字典或Series的列表)各项将会成为DataFrame的一行。索引的并集会成为DataFrame的列标。
DataFrame(由列表或元组组成的列表)类似于二维ndarray
DataFrame(DataFrame)沿用DataFrame
DataFrame(NumPy的MaskedArray)类似于二维ndarray,但掩码结果会变成NA/缺失值
重新指定index说明
df.reindex([x,y,…], fill_value=NaN, limit)返回一个适应新索引的新对象,将缺失值填充为fill_value,最大填充量为limit
df.reindex([x,y,…], method=NaN)返回适应新索引的新对象,填充方式为method
df.reindex([x,y,…], columns=[x,y,…],copy=True)同时对行和列进行重新索引,默认复制新对象。
df.drop(index, axis=0)丢弃指定轴上的指定项。
排序函数说明
df.sort_index(axis=0, ascending=True)
df.sort_index(by=[a,b,…])
根据索引排序
汇总统计函数说明
df.count()非NaN的数量
df.describe()一次性产生多个汇总统计
df.min()
df.max()
最小值
最大值
df.idxmax(axis=0, skipna=True)
df.idxmin(axis=0, skipna=True)
返回含有最大值的index的Series
返回含有最小值的index的Series
df.quantile(axis=0)计算样本的分位数
df.sum(axis=0, skipna=True, level=NaN)返回一个含有求和小计的Series
df.mean(axis=0, skipna=True, level=NaN)返回一个含有平均值的Series
df.median(axis=0, skipna=True, level=NaN)返回一个含有算术中位数的Series
df.mad(axis=0, skipna=True, level=NaN)返回一个根据平均值计算平均绝对离差的Series
df.var(axis=0, skipna=True, level=NaN)返回一个方差的Series
df.std(axis=0, skipna=True, level=NaN)返回一个标准差的Series
df.skew(axis=0, skipna=True, level=NaN)返回样本值的偏度(三阶距)
df.kurt(axis=0, skipna=True, level=NaN)返回样本值的峰度(四阶距)
df.cumsum(axis=0, skipna=True, level=NaN)返回样本的累计和
df.cummin(axis=0, skipna=True, level=NaN)返回样本的累计最大值
df.cummax(axis=0, skipna=True, level=NaN)返回样本的累计最小值
df.cumprod(axis=0, skipna=True, level=NaN)返回样本的累计积
df.diff(axis=0)返回样本的一阶差分
df.pct_change(axis=0)返回样本的百分比数变化
计算函数说明
df.add(df2, fill_value=NaN, axist=1)元素级相加,对齐时找不到元素默认用fill_value
df.sub(df2, fill_value=NaN, axist=1)元素级相减,对齐时找不到元素默认用fill_value
df.div(df2, fill_value=NaN, axist=1)元素级相除,对齐时找不到元素默认用fill_value
df.mul(df2, fill_value=NaN, axist=1)元素级相乘,对齐时找不到元素默认用fill_value
df.apply(f, axis=0)将f函数应用到由各行各列所形成的一维数组上
df.applymap(f)将f函数应用到各个元素上
df.cumsum(axis=0, skipna=True)累加,返回累加后的dataframe
Dataframe索引切片

【详情查看】

索引方式说明
df[val]选取DataFrame的单个列或一组列
df.ix[val] (函数过期)选取Dataframe的单个行或一组行
df.ix[:,val] (函数过期了)选取单个列或列子集
df.ix[val1,val2] (函数过期了)将一个或多个轴匹配到新索引
reindex方法将一个或多个轴匹配到新索引
xs方法根据标签选取单行或者单列,返回一个Series
icol、irow方法根据整数位置选取单列或单行,并返回一个Series
get_value、set_value根据行标签和列标签选取单个值
条件筛选:
==> 按列筛选行:
df = df[df['age'] > 10]                           # 年龄>10 的行
df = df[(df['sex'] =='male') & (df['age'] > 20)]  # 性别=男 & 年龄>20 的行


==> 按行筛选列:(筛选第0行大于10的所有列)
df.loc[:, df.loc['0'] > 10]                       # 第0行所有值>10 的列


==> 行列同时条件筛选
df.loc[df['age'] > 20, df.loc['teacher'] =='']   # 年龄>20 的行,第0行所有值>10 的列
df.loc[:, (df.loc['1'] > 0) | (df.loc['age'] > 30)]    

运算:
默认情况下,Dataframe和Series之间的算术运算会将Series的索引匹配到的Dataframe的列,沿着列一直向下传播。若索引找不到,则会重新索引产生并集。

三、Index

pandas的索引对象负责管理轴标签和其他元数据(比如轴名称等)。构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index。Index对象不可修改,从而在多个数据结构之间安全共享。

主要的Index对象说明
Index最广泛的Index对象,将轴标签表示为一个由Python对象组成的NumPy数组
Int64Index针对整数的特殊Index
MultiIndex“层次化”索引对象,表示单个轴上的多层索引。可以看做由元组组成的数组
DatetimeIndex存储纳秒级时间戳(用NumPy的Datetime64类型表示)
PeriodIndex针对Period数据(时间间隔)的特殊Index
Index属性

在pandas中连接DatetimeIndex对象: https://cloud.tencent.com/developer/ask/213225

函数说明
Index([x,y,…])创建索引
append(Index)连接另一个Index对象,产生一个新的Index
diff(Index)计算差集,产生一个新的Index
intersection(Index)计算交集
union(Index)计算并集
isin(Index)检查是否存在与参数索引中,返回bool型数组
delete(i)删除索引i处元素,得到新的Index
drop(str)删除传入的值,得到新Index
insert(i,str)将元素插入到索引i处,得到新Index
is_monotonic()当各元素大于前一个元素时,返回true
is_unique()当Index没有重复值时,返回true
unique()计算Index中唯一值的数组

例子:
https://blog.csdn.net/rwangnqian/article/details/79000134

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SongpingWang

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值