博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pandas常用操作总结【持续更新】
阅读量:5876 次
发布时间:2019-06-19

本文共 6233 字,大约阅读时间需要 20 分钟。

一.iloc 按索引取行列,可能是一行多行,或者一列多列,或者某行某列

>>> df      a     b     c     d0     1     2     3     41   100   200   300   4002  1000  2000  3000  4000复制代码

取某行:

>>> df.iloc[0]a    1b    2c    3d    4Name: 0, dtype: int64复制代码

取多行:

>>> df.iloc[:3]      a     b     c     d0     1     2     3     41   100   200   300   4002  1000  2000  3000  4000复制代码

取某行某列:

df.iloc[[0, 2], [1, 3]]      b     d0     2     42  2000  4000复制代码

取多行多列:

df.iloc[1:3, 0:3]      a     b     c1   100   200   3002  1000  2000  3000复制代码

二.loc 按名称取行列,可能是一行多行,或者一列多列,或者某行某列

>>> df            max_speed  shieldcobra               1       2viper               4       5sidewinder          7       8复制代码

取一行,返回的是一个series:

df.loc['viper']返回结果是:max_speed    4shield       5Name: viper, dtype: int64复制代码

取多行,返回的是一个series:

df.loc['cobra':'viper', 'max_speed']cobra    1viper    4Name: max_speed, dtype: int64复制代码

两层中括号[[]]取一行或多行,返回一个dataframe:

df.loc[['viper', 'sidewinder']]            max_speed  shieldviper               4       5sidewinder          7       8复制代码

三、groupby 按一定条件将数据分组并按分组取得各组数据

>>> 原始datframe:df   Animal  Max Speed0  Falcon      380.01  Falcon      370.02  Parrot       24.03  Parrot       26.0复制代码

按照Animal是否为Falcon,进行分组,并取出各组dataframe

df1=df.groupby(df.Animal=='Falcon')  #分组操作df2=df1.get_group(False)#将分组结果,结果为False即不含有的保存为df2df3=df1.get_group(True)#将分组结果,结果为True即含有的保存为df3复制代码

打印结果:

四、两个dataframe合并 merge

df1 = pd.DataFrame({
'lkey': [ 'bar', 'baz', 'foo'], 'value': [2, 3, 5]})df2 = pd.DataFrame({
'lkey': ['bar', 'baz', 'foo'], 'value': [ 6, 7, 8]})print(df1)print(df2)df1.merge(df2,how='left',on='lkey')输出结果: lkey value0 bar 21 baz 32 foo 5 lkey value0 bar 61 baz 72 foo 8Out[66]:lkey value_x value_y0 bar 2 61 baz 3 72 foo 5 8复制代码

how='left'是连接方式,本例是左连接

on='lkey'是键的选择,左右连接方式是按lkey相同来合并

五、看dataframe的行数与列数 shape

y_pd是一个dataframeprint('行数:',y_pd.shape[0])print('列数:',y_pd.shape[1])复制代码

六、一列数据是str,替换其中某字符 .str.replace

df = pd.DataFrame({
"抽烟": ['1-2', '2-3', '4-7'], "B": [4, 5, 6]})df["抽烟"]=df["抽烟"].str.replace('-',',')原始df: B 抽烟0 4 1-21 5 2-32 6 4-7替换后df:B 抽烟0 4 1,21 5 2,32 6 4,7#对字符做截取.str[n:m],取第n-m个字符df['抽烟']=df['抽烟'].str[0:-1] B 抽烟0 4 1-1 5 2-2 6 4-复制代码

七、修改列名 rename

df = pd.DataFrame({
"抽烟": [1, 2, 3], "B": [4, 5, 6]})df.rename(columns={
"抽烟": "烟龄/每日几支",'B':'喝酒'},inplace=True)B 抽烟0 4 11 5 22 6 3变为 喝酒 烟龄/每日几支0 4 11 5 22 6 3复制代码

八、将某一列或者几列中的值替换为另一个值 replace

df = pd.DataFrame({
'A': [',', '/', '='], 'B': ['1', 'b', '/']})df.replace({
'A':',','B':'b'},'换')原来df: A B0 , 11 / b2 = /变化后: A B0 换 11 / 换2 = /复制代码

对整个df中某个值做替换

df.replace('/','全换')全换后:	A       B0	,	11	全换	b2	=	全换复制代码

通过字典的嵌套,实现对任意列任意值的替换:

df.replace({
'A': {
'=': '==', '/': '//'},'B':{
'1':'111'}} )替换后: A B0 , 1111 // b2 == /复制代码

九、如果a列的值等于m,修改b列的值为n

df.loc[df['a']==m,'b']=n

修改前df:a	b14	360ba0	36013	180df.loc[df['a'] == '13','b'] =666 修改之后:a	b14	360ba0	36013	666复制代码

十、删除某一列或者几列 drop

df = pd.DataFrame({
'a': ['1/1', '13/12', '14/1'], 'b': [360, 180, 360],'c':[1,2,3] })df.drop(columns=['a','b'],axis=1,inplace=True)原df: a b c0 1/1 360 11 13/12 180 22 14/1 360 3删除后: c0 11 22 3复制代码

十一、一列拆分成两列 str.split('符号')

df = pd.DataFrame({
'a': ['1/1', '13/12', '14/1'], 'b': [360, 180, 360],'c':[1,2,3] }) 方法一:df2=pd.DataFrame(df['a'].str.split('/',expand=True))df2如下: 0 10 1 11 13 122 14 1方法2:df2=pd.DataFrame( (a.split('/') for a in df['a']), index=df.index,columns=['拆1','拆2'])df2如下: 拆1 拆20 1 11 13 122 14 1复制代码

十二、apply函数与匿名函数合用做批量修改

df = pd.DataFrame({
'a': ['1/1', '13/12', '14/1'], 'b': [360, 180, 360],'c':[1,2,3] }) df['a']=df['a'].apply(lambda x:x[0])#相当于对a这一列做变换,都改为第一个字符df a b c0 1 360 11 1 180 22 1 360 3复制代码

十三、read_csv中 parse_dates参数

读取时,使某一列或几列为datetime类型,为日期列。

pd.read_csv('path',parse_dates=['1'])-> 解析1列的值作为独立的日期列;复制代码

十四、缺失值检测 isna()==isnull()

df = pd.DataFrame({
'age': [5, 6, 2,1], 'born': [pd.NaT, pd.Timestamp('1939-05-27'), pd.Timestamp('1940-04-25'),pd.Timestamp('1939-05-27')], 'name': ['Alfred', 'Batman', '','11'], 'toy': [None, 'Batmobile', 'Joker','2d']})【1】df.isna()输出:是一个dataframe,反映了每个位置是否为缺失值 age born name toy0 False True False True1 False False False False2 False False False False3 False False False False【2】df.isna().sum()输出:是一个Series,反映了每列空值的个数age 0born 1name 0toy 1dtype: int64【3】df.isna().any()输出:是一个Series,反映了每列是否有空值age Falseborn Truename Falsetoy Truedtype: bool【4】df.isna().sum().any()输出:一个布尔值,反映了整个表是否有空值True【5】percent = (df.isnull().sum())/(df.isnull().count()*100)输出:反映了每列空值的占比age 0.0000born 0.0025name 0.0000toy 0.0025dtype: float64复制代码

十五、对Series里面的每个值进行计数并且排序 value_counts()

index = pd.Index([3, 1, 2, 3, 4, np.nan])index.value_counts()输出:3.0    24.0    12.0    11.0    1复制代码
df = pd.DataFrame({
'a': ['1/1', '13/12', '14/1'], 'b': [360, 180, 360],'c':[1,2,3] })df['a'].value_counts()输出:1/1 114/1 113/12 1Name: a, dtype: int64df['a'].value_counts().valuesarray([1, 1, 1])df['a'].value_counts().indexIndex(['1/1', '14/1', '13/12'], dtype='object')复制代码

十六、按多个列进行分组

先按gender进行分组,在每个gender內按照happiness进行分组并统计。

train.groupby(['gender','happiness']).happiness.count()gender  happiness1       1              43        2             216        3             588        4            2306        5             5992       1              61        2             281        3             571        4            2512        5             811复制代码

画图来看就是

import seaborn as snssns.countplot('gender',hue='happiness',data=train)复制代码

结果为:

十七、concat之后的索引重置

df.reset_index(drop=True)复制代码

不然的话,索引还和concat之前一样,出现重复的现象。

十八、值填充时-用出现次数最多的填充

对a列中,值小于0的填充为除去空值以外出现最多的值df.loc[df['a']<0,'a']=df['a'].dropna().mode().values复制代码

十九、按照一列的分组计算另一列的均值

df = pd.DataFrame({
"name": ['1', '1', '2'], "toy": [10, 20, 30], "born": [1, 2, 3]})df['d']=df.groupby(df['name']=='1')['toy'].transform('mean').valuesoutput: born name toy d0 1 1 10 151 2 1 20 152 3 2 30 30复制代码

转载地址:http://fsuix.baihongyu.com/

你可能感兴趣的文章
Redis 通用操作2
查看>>
11. Spring Boot JPA 连接数据库
查看>>
洛谷P2925 [USACO08DEC]干草出售Hay For Sale
查看>>
MapReduce工作原理流程简介
查看>>
那些年追过的......写过的技术博客
查看>>
小米手机解锁bootload教程及常见问题
查看>>
Python内置函数property()使用实例
查看>>
Spring MVC NoClassDefFoundError 问题的解决方法。
查看>>
CentOS 6.9配置网卡IP/网关/DNS命令详细介绍及一些常用网络配置命令(转)
查看>>
python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
查看>>
C# 解决窗体闪烁
查看>>
CSS魔法堂:Transition就这么好玩
查看>>
【OpenStack】network相关知识学习
查看>>
centos 7下独立的python 2.7环境安装
查看>>
[日常] 算法-单链表的创建
查看>>
前端工程化系列[01]-Bower包管理工具的使用
查看>>
使用 maven 自动将源码打包并发布
查看>>
Spark:求出分组内的TopN
查看>>
Python爬取豆瓣《复仇者联盟3》评论并生成乖萌的格鲁特
查看>>
关于跨DB增量(增、改)同步两张表的数据小技巧
查看>>