python pandas rename函数_Python-pandas | 一些函数
shift、diff、applymap和apply、pdcut和pd.qcut、groupby+agg聚合、sort_values、merge和concat、value_counts、any和all
rename、drop、duplicates、drop_duplicates、dropna
胡言乱语可能有些只能用于1d array 与series ,有些2d、df都可以
结合常识猜猜用于哪,或者试试
注意pd开头、或者df开头
shift()
df.shift(self, periods=1, freq = None, axis=0)
移动df中的行列
periods正为下移或右移
import pandas as pd
df = pd.DataFrame({'Col1': [10, 20, 15, 30, 45],
'Col2': [13, 23, 18, 33, 48],
'Col3': [17, 27, 22, 37, 52]})
print(df.shift()) # 跨行操作下移1行
print(df.shift(-2)) # 跨行操作上移2行
print(df.shift(1, axis = 'columns')) # 跨列操作右移1行
# 结果
Col1 Col2 Col3
0 NaN NaN NaN
1 10.0 13.0 17.0
2 20.0 23.0 27.0
3 15.0 18.0 22.0
4 30.0 33.0 37.0
Col1 Col2 Col3
0 15.0 18.0 22.0
1 30.0 33.0 37.0
2 45.0 48.0 52.0
3 NaN NaN NaN
4 NaN NaN NaN
Col1 Col2 Col3
0 NaN 10.0 13.0
1 NaN 20.0 23.0
2 NaN 15.0 18.0
3 NaN 30.0 33.0
4 NaN 45.0 48.0
diff()
df.diff(self, period=1, axis=0)
计算df - df.shift()
df = pd.DataFrame({'Col1': [10, 20, 15, 30, 45],
'Col2': [13, 23, 18, 33, 48],
'Col3': [17, 27, 22, 37, 52]})
print(df.diff())
# 结果
Col1 Col2 Col3
0 NaN NaN NaN
1 10.0 10.0 10.0
2 -5.0 -5.0 -5.0
3 15.0 15.0 15.0
4 15.0 15.0 15.0
applymap() 与 apply()
用于调用无法用内置函数或算法完成的函数,比如用于:某个函数只能作用在series
自己编写的函数df.applymap(function) 对每个元素进行调用
df.apply(fuctiion, axis = 0) 对每一列/行中的每个元素进行操作。例如,要把每列排在前20%的数据改完‘A’
pd.cut() 数值本身分
pd.cut(series/1d array,bins,right=True,labels=None)
指定bins序列会更明确
In [22]: pd.cut(np.array([1.2,2.2,3.2,4.2,5.2]), [1,3])
Out[22]:
[(1.0, 3.0], (1.0, 3.0], NaN, NaN, NaN]
Categories (1, interval[int64]): [(1, 3]]
In [24]: pd.cut(np.array([1.2,2.2,3.2,4.2,5.2]), [1,2,3], right = False)
Out[24]:
[[1.0, 2.0), [2.0, 3.0), NaN, NaN, NaN]
Categories (2, interval[int64]): [[1, 2) < [2, 3)]
In [25]: pd.cut(np.array([1.2,2.2,3.2,4.2,5.2]),2)
Out[25]:
[(1.196, 3.2], (1.196, 3.2], (1.196, 3.2], (3.2, 5.2], (3.2, 5.2]]
Categories (2, interval[float64]): [(1.196, 3.2] < (3.2, 5.2]]
In [27]: pd.cut(np.array([1.2,2.2,3.2,4.2,5.2]), [1,2,3], labels = ['1-2','2-3'])
Out[27]:
[1-2, 2-3, NaN, NaN, NaN]
Categories (2, object): [1-2 < 2-3]
pd.qcut() 百分比分
可以把一组数据按大小区间进行分区
pd.qcut(series/1d array, 区间隔点, labels = []),labels数量要和区间数量一样注意是pd开头
用于1d array与series
虽然不用于df,但可借助apply
data = pd.Series([0,8,1,5,3,7,2,6,10,4,9])
print(pd.qcut(data,[0, 0.1, 0.2, 0.3, 1],labels=['first 10%','second 10%','third 10%','70%']))
# 结果
# 这里因为数据里有11个数,没法刚好按照 1:1:1:7 分,所以 0和1,都被分到了 'first10%' 这一类.
0 first 10%
1 70%
2 first 10%
3 70%
4 third 10%
5 70%
6 second 10%
7 70%
8 70%
9 70%
10 70%
dtype: category
Categories (4, object): [first 10% < second 10% < third 10% < 70%]
groupby
df.groupby(self, by = None, axis = 0, as_index=True)按by指定的列名分组
as_index 决定分组列是否变为index
# 创建df
values = np.array([1, 3, 2, 4, 1, 6, 4])
example_df = pd.DataFrame({
'value': values,
'even': values % 2 == 0,
'above_three': values > 3
}, index=['a', 'b', 'c', 'd', 'e', 'f', 'g'])
# 定义函数
def standardize(xs):
return (xs - xs.mean()) / xs.std()
# 分组
# 按'even'分组后,选出value列,对分组后的每个元素来使用函数standardize。在组里操作
grouped_data = example_df.groupby('even')
print(grouped_data['value'].apply(standardize))
# 结果
a -0.577350
b 1.154701
c -1.224745
d 0.000000
e -0.577350
f 1.224745
g 0.000000
Name: value, dtype: float64
agg聚合
groupby分组后的agg聚合:可多个函数同时进行df.groupby('Country').agg(['min','max'])
df.groupby('Country').agg({'Income':'min'})
df.groupby('Country').agg({'Income':'min' , 'Age':['min','mean']})
In [17]: df = pd.DataFrame({'Country':['China','China', 'India', 'India', 'America', 'Japan', 'China', 'India'],
...: 'Income':[10000, 10000, 5000, 5002, 40000, 50000, 8000, 5000],
...: 'Age':[5000, 4321, 1234, 4010, 250, 250, 4500, 4321]})
In [18]: df
Out[18]:
Country Income Age
0 China 10000 5000
1 China 10000 4321
2 India 5000 1234
3 India 5002 4010
4 America 40000 250
5 Japan 50000 250
6 China 8000 4500
7 India 5000 4321
In [19]: df.groupby('Country').agg(['min','max'])
Out[19]:
Income Age
min max min max
Country
America 40000 40000 250 250
China 8000 10000 4321 5000
India 5000 5002 1234 4321
Japan 50000 50000 250 250
In [20]: df.groupby('Country').agg({'Income':'min'})
Out[20]:
Income
Country
America 40000
China 8000
India 5000
Japan 50000
In [21]: df.groupby('Country').agg({'Income':'min' , 'Age':['min','mean']})
Out[21]:
Income Age
min min mean
Country
America 40000 250 250.000000
China 8000 4321 4607.000000
India 5000 1234 3188.333333
Japan 50000 250 250.000000
sort_values
排序
df.sortvalues(by=指定列名/行名, axis=0, ascending = True, inplace = False, na_position = {'first,','last'}根据by指定的列排序
ascending = False 时是倒序
inplace = True是替换原数据
na_postion设置缺失值位置
df=pd.DataFrame({'col1':['A','A','B',np.nan,'D','C'],
'col2':[2,1,9,8,7,7],
'col3':[0,1,9,4,2,8]
})
print(df.sort_values(by=['col1','col2'], na_position='first'))
# 结果
col1 col2 col3
3 NaN 8 4
1 A 1 1
0 A 2 0
2 B 9 9
5 C 7 8
4 D 7 2
merge()
pd.merge(参与合并的左df, 参与合并的右df, how = 'inner', on , lefton, right on, suffixes……)
或者df1.merge(df2, …)
不用print也能显示表格how = 'inner'内连接-key交集, 'outer'外连接-key并集, 'left'左连接, 'right'有链接
on
# how = 'inner', 等价于on = 'key',按照相同的字段key进行合并。
df1 = pd.DataFrame({'key':list('bbaca'), 'data1':range(8)})
df2 = pd.DataFrame({'key':['a','b','d'], 'data2':range(3)})
print(pd.merge(df1,df2))
# 等价
print(pd.merge(df1, df2, on='key'))
# 结果
data1 key data2
0 0 b 1
1 1 b 1
2 2 a 0
3 4 a 0
# how = 'outer',两边的值都连起来,缺失的NaN填充
print(pd.merge(df1,df2, how='outer'))
# 结果
data1 key data2
0 0.0 b 1.0
1 1.0 b 1.0
2 2.0 a 0.0
3 4.0 a 0.0
4 3.0 c NaN
5 NaN d 2.0
# how = 'left', 取左df的全部
print(pd.merge(df1,df2, how='left'))
# 结果
data1 key data2
0 0 b 1.0
1 1 b 1.0
2 2 a 0.0
3 3 c NaN
4 4 a 0.0
# how='right', 取右df全部
print(pd.merge(df1,df2, how='right'))
# 结果
data1 key data2
0 0.0 b 1
1 1.0 b 1
2 2.0 a 0
3 4.0 a 0
4 NaN d 2
# how和on一起
subway_df.merge(weather_df, on =['DATEn','hour','latitude','longitude'],how = 'inner')left_on、right_on、 suffixes
df1 = pd.DataFrame({'lkey': ['foo', 'bar', 'baz', 'foo'],
'value': [1, 2, 3, 5]})
df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'baz', 'foo'],
'value': [5, 6, 7, 8]})
print(pd.merge(df1,df2, left_on='lkey', right_on='rkey', suffixes=('_1','_2')))
# 结果
lkey value_1 rkey value_2
0 foo 1 foo 5
1 foo 1 foo 8
2 foo 5 foo 5
3 foo 5 foo 8
4 bar 2 bar 6
5 baz 3 baz 7
concat()
pd.concat([df1,df2,..], axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False)参数 join = 'inner'/'outer'
axis = 0 行接;aixs =1 列接
In [2]: a = pd.DataFrame([[1,2,3],
...: [4,5,6],
...: [7,8,9]],columns=['a','b','c'])
...: b = pd.DataFrame([[11,23,45],
...: [22,23,24],
...: [31,32,33]],columns=['a','b','c'])
In [3]: pd.concat([a,b])
Out[3]:
a b c
0 1 2 3
1 4 5 6
2 7 8 9
0 11 23 45
1 22 23 24
2 31 32 33
In [4]: pd.concat([a,b],axis=1,join = 'inner')
Out[4]:
a b c a b c
0 1 2 3 11 23 45
1 4 5 6 22 23 24
2 7 8 9 31 32 33
value_counts()
计算数据出现的频率: df['item_name'].value_counts()升序排序:df['item_name'].value_counts(ascending = True)
计算占比:df['item_name'].value_counts(normalize = True)
空白值默认剔除
df.apply(pd.value_counts)
In [24]: df = pd.DataFrame({'区域1' : ['西安', '太原', '西安', '太原', '郑州', '太原'],
...: '区域2' : ['太原', '太原', '西安', '西安', '西安', '太原']})
...: print(df.apply(pd.value_counts))
区域1 区域2
太原 3 3.0
西安 2 3.0
郑州 1 NaN
any
any(iterable)参数iterable:可迭代对象;如果当iterable所有的值都是0、''或False时,那么结果为False
如果所有元素中有一个值非0、''或False,那么结果就为True
any(df.col.isnull()) 若为true则说明col列有空值
all
所有都非0、''或False,才返回True
rename
列标签是不能修改的内容 即df.columns[6] = 'new_name'报错
但df.columns = ['a','b']可修改
正确(复杂方法):
new_index = list(df.columns)
new_index[6] = 'new_new'
df.columns = new_index
(简单方法) rename函数:df.rename(columns = {'a':'aa'},inplace = True)
可修改索引,也可修改列名
要加上inplace = True 才可以在原df上进行修改
In [11]: df = pd.DataFrame([[1,2,3],[4,5,6]],columns = {'a','b','c'},index = {'d','e'})
In [12]: df
Out[12]:
a c b
e 1 2 3
d 4 5 6
In [13]: df.rename(columns = {'a':'aa'},inplace = True)
In [14]: df
Out[14]:
aa c b
e 1 2 3
d 4 5 6
In [16]: df.rename(index = {'e':'ee'},inplace = True)
In [17]: df
Out[17]:
aa c b
ee 1 2 3
d 4 5 6
drop
df.drop(labels=None, axis=0, index=None, level=None, inplace=False, errors='raise')labels 要删除的标签,或者用columns
axis 列标签还是行标签
del df['A'] 会在df直接删除,drop则需inplace
duplicated
查找重复值参数subset,用来标记列,默认所有列
参数keep'first' 将第一次出现的值标为True
'last' 将最后一次出现的值标为True
False 将所有重复值标记为True
参数inplace
In [12]: df= pd.DataFrame({'k1': [ 's1']* 3 + ['s2']* 5,'k2' : [1, 1, 2, 3, 3, 4, 4,4]})
In [13]: df
Out[13]:
k1 k2
0 s1 1
1 s1 1
2 s1 2
3 s2 3
4 s2 3
5 s2 4
6 s2 4
7 s2 4
In [14]: df.duplicated()
Out[14]:
0 False
1 True
2 False
3 False
4 True
5 False
6 True
7 True
dtype: bool
In [15]: df.duplicated(keep = 'first')
Out[15]:
0 False
1 True
2 False
3 False
4 True
5 False
6 True
7 True
dtype: bool
In [16]: df.duplicated(keep = 'last')
Out[16]:
0 True
1 False
2 False
3 True
4 False
5 True
6 True
7 False
dtype: bool
In [17]: df.duplicated(keep = False)
Out[17]:
0 True
1 True
2 False
3 True
4 True
5 True
6 True
7 True
dtype: bool
drop_duplicates
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
keep = 'True'删除重复项并保留第一次出现的值
dropna
df.dropna(axis=0, how='any', inplace=False)how参数:any只要有空值就删除,all全是空值才删除
python pandas rename函数_Python-pandas | 一些函数相关推荐
- python datetime timedelta函数_Python Pandas DatetimeIndex.to_perioddelta()用法及代码示例
Python是进行数据分析的一种出色语言,主要是因为以数据为中心的python软件包具有奇妙的生态系统. Pandas是其中的一种,使导入和分析数据更加容易. Pandas DatetimeIndex ...
- python查看dataframe数据类型_python pandas中DataFrame类型数据操作函数的方法
python数据分析工具pandas中DataFrame和Series作为主要的数据结构. 本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数. 1)查看DataFrame数 ...
- python dataframe函数_python pandas中DataFrame类型数据操作函数的方法
这篇文章主要介绍了关于python pandas中DataFrame类型数据操作函数的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 python数据分析工具pandas中Data ...
- python 正则 replace函数_python pandas中的str对象的replace函数
网页链接mp.weixin.qq.com replace函数本身并不复杂,但由于该函数和正则表达式结合会使其作用更加灵活,该函数的主要作用是根据特定的表达式匹配字符串找到后并按照给定的字符或者函数进 ...
- python offset函数_Python Pandas tseries.offsets.BusinessHour.copy用法及代码示例
Dateoffsets是用于Pandas中日期范围的标准日期增量.就我们传入的关键字args而言,它的工作方式与relativedelta完全相同.DateOffets的工作方式如下,每个偏移量指定一 ...
- python时间序列函数_python时间日期函数与利用pandas进行时间序列处理详解
python标准库包含于日期(date)和时间(time)数据的数据类型,datetime.time以及calendar模块会被经常用到. datetime以毫秒形式存储日期和时间,datetime. ...
- python panda是什么_python pandas浅析
之前一直想自学一下大数据,正好七月在线在做1元优惠购活动,所以机缘巧合开始学习,今天就对最近学习的pandas进行一个笔记梳理,以便后续回顾.本次课程主要学习了以下内容: 一. 简介 pandas 是 ...
- python lamda函数_python 用lambda函数替换for循环的方法
场景如下: 现在有一个dataframe,其中一列为score,值从0-100, df: score 98 88 37 68 86 33 现在需要增加一列level,给这些分数分类,90分以上为A,6 ...
- python的describe参数_Python Pandas Series.describe()用法及代码示例
Pandas 系列是带有轴标签的一维ndarray.标签不必是唯一的,但必须是可哈希的类型.该对象同时支持基于整数和基于标签的索引,并提供了许多方法来执行涉及索引的操作. Pandas Series. ...
- python编程函数_python编程中函数和参数你必须知道的
今天我们先聊少一点,就聊聊函数是什么和函数的参数,以及对这两个东西的思考 起源于抽象 在程序员写代码的时候,通常都会提到一个词叫抽象, 很多人都知道在面向对象中,将一个对象抽象为一个类,其实这就是我们 ...
最新文章
- AIoT的发展路上,英特尔如何通过边缘计算掀起产业变革
- vue监听h5页面返回健(微信和支付宝浏览器亲测):
- 1-36随机生成6个不重复的数
- 一些实用却很少用到的css以及标签
- php服务器怎么设置cookie,php服务器如何清除浏览器cookie
- JS-Demo1:JavaScript实现表格列拖动
- 【特征提取】基于matlab频带方差端点检测【含Matlab源码 1765期】
- 网络编程中udp,tcp.客户端,和服务器端。运用到的软件,串口调试助手 NetAssist
- html调查问卷页面,html+js 问卷调查页面的展示以及form提交
- Harmony integration in Seurat V3 pipeline
- zabbix 监控81端口
- 魔方机器人需要特制魔方吗_大开眼界:会玩魔方的机器人
- 三型两步验证登不上_苹果手机开启了双重认证,未信任的设备之前登入了,开启了双重认证未...
- JAVA毕业设计装修设计管理系统设计与实现计算机源码+lw文档+系统+调试部署+数据库
- 悲痛!长安福特AE工程师之死:985高校吉大毕业,入职8年,年仅30岁抑郁跳楼身亡...
- Numpy中reshape的用法
- prometheus对接influxdb
- CP2102 USB to UART Bridge Controller 驱动安装
- 数据中心服务器机柜电气参数,数据中心服务器机柜一些安装与参数
- bugku练习Web 1(web2--成绩单)