pandas 或者字段值_pandas最常用的操作

1.对列进行重命名

两种方法:

rename

df.rename(columns={})

注意两点,columns这个参数名不能丢,columns后边跟字典,想改哪个改哪个

.columns

dfname.columns = []

注意两点,是个列表,列表必须包含所有的列名字

总结,只改几个名字用rename,都改用.column

2.根据列的值筛选数据

df[]

中括号里边写条件,写相等的条件的时候用==,当然也可以写>、

df[df['c1']==1 & df['c2']==1]

3.字符串转为日期

有一个最好用的函数,pd['字段名'].to_datetime()直接转换为日期格式,但是使用这个函数的前提是你的字段是一个日期格式的字符串。

这个转换的好处是,可以直接用.dt属性了,里边包装了很多函数,比如:获取年份,月份,日期,小时,甚至今天是周几等等。

然后还可以直接两列相减,转化为你需要的时间刻度,比如两个事件相隔几秒,几分钟,几小时。

注意点是,to_datetime()可以设置日期的格式,怎么设置的话,参考下面这个例子,其他怎么设置以此类推吧。

format ='%Y-%m-%d'

format = '%Y-%m-%d %H:%M:%S'

这里需要注意,我们都知道python字符串的日期函数strftime和strptime,当你转换为dt以后你就可以使用这两个函数进行自由的字符串和日期格式转换,但是前置任务一定是转换为datetime类型。

4.删除列或者行的数据

有两种方案,del和drop

del,del后边接数据框,del df['column1'],这个方法只能删除列,不能删除行。

drop,drop是一个函数,df.drop('column1',inplace=True)

注意一点,inplace这个参数,如果设置为True,那么将直接在数据框上修改。

这个函数,行列通吃,不过要删除行的时候需要指定index = [],要注意的是如果是默认的index(数字),千万不要加引号,否则报错。

df.drop([0,1])可以,但是df.drop(['0','1'])不行

5.选择某行某列的数据

这个不是按行或者按列选取数据,而是选取某行某列的具体数据。本来有三个方法,后来ix这个不让用了,省事了。用loc和iloc就可以。

iloc,为啥加个i,因为是按照索引来的,就是说是数字是标号,不是名字。

loc, 这个就是按照名字来的。

随便举个例子

data = [[1, 2, 3], [4, 5, 6]]

index = ['a', 'b']

column = ['left', 'center', 'right']

table = pd.DataFrame(data=data, index=index, columns=column)

- 例子1

table.iloc[0:1,1],输出a 2

-例子2

table.loc[['a','b'],'left']

输出:

a 1

b 4

6.对列元素进行操作

两种方法,一种是针对数字的to_numeric(),一种是针对所有类型的。

to_numeric(),转换为数字格式。

tmp['_score'] = tmp['_score'].apply(pd.to_numeric)

astype(),这个是强制转换,想转什么转什么

7.使用聚合函数

这个真的是最常用的,你可以想到的应用场景统计某一个类别下有多少量,统计一下平均单价,统计一下环比和同比增长,统计一下累积增加值等等,pandas都有函数可以用。在使用的时候需要配合一些函数来用,比如apply、agg、applymap。

直接用聚合函数,比如.sum,.avg,这个没啥好说的

apply函数

apply函数只能对待处理的列使用相同的函数,比如apply(np.sum,np.avg),注意应用这类函数加个np,要不然报错,其实就一列数据用这种聚合函数没有意义,一般后边接个lambda函数。

apply可以对整个dataframe使用,也可以单独对某一列使用,对整个dataframe是要按行列聚合的,区别于applymap,其他差不多。

map函数

map函数是python自带的,其作用就是对元素应用某个函数,可以接受的参数包括一个函数(可自定义)、或者一个映射关系的字典。

map这个函数只能对某一列或行的元素使用。

applymap函数

applymap函数对每一个元素都起作用,这个函数倒是可以对整的dataframe使用,但是始终是对元素进行操作的。

agg函数

agg这个函数和apply用法一样,它比较厉害的地方在于可以用一个字典做参数,定义每一个字段使用的聚合函数,比方说:df.agg({'ext price': ['sum', 'mean'], 'quantity': ['sum', 'mean'], 'unit price': ['mean']})

8.groupby操作

groupby的作用是按照某个字段进行分组,这个语法本身并不难,但是写法比较多,容易弄混。

dfname.groupby().ziduan.sum()

推荐写法,都按照这个方法写不容易弄混。groupby括号里直接写column的名字,如果是多个字段分组,用中括号扩起来。然后要统计的字段直接用点接上,如果好几个字段,加个apply或者agg也行。

dfname[ziduan].groupby(dfname[]).sum()

这个写法直接把要统计的字段写在前边,groupby的时候要把dfname再写上否则报错。

groupby以后这个dataframe的index就变了,需要reset_jndex一下才行。

9.计数操作

为啥把这个拿出来说呢,因为计数的需求很迷,和sum、avg完全不一样,比较常见的其实就两个需求。

统计某一列有几个元素(去重)

为啥去重,不去重没啥意义啊,不多说(比如说useid这个字段有几个不同的值)。

df.col1.drop_duplicated().count()

df.col1.nunique()

个人觉得优先使用第二个函数,然后这个还有个unique会把元素都给你返回来。

统计某一列某个元素出现几次

df.col1.value_counts()

10.na值处理

两个函数,dropna,fillna。里边参数自由组合,可以实现各种需求。

11.数据框的合并

可选的函数有merge、concat、join等。

concat

最简单的连接函数,就是按行或者列进行拼接,按行就是axis = 0,按列就是axis = 1,默认是按行进行拼接。

df1 = pd.DataFrame({'city': ['Chicago', 'San Francisco', 'New York City'], 'rank': range(1, 4)})

df2 = pd.DataFrame({'city': ['Chicago', 'Boston', 'Los Angeles'], 'rank': [1, 4, 5]})

pd.concat([df1,df2])

pd.concat([df1,df2],axis=1)

这里两个地方容易犯错:

你要拼接的两个df没有用中括号括起来,pd.merge(df1,df2);

你用df去调用merge函数,df1.merge(df2)。

merge

这个函数最接近于sql里的join,功能类似,参数多,挑重要的说。

on

按照哪个键join,可以是一个也可以是多个,当然不写的话就按公共的键join,写多个的话用()括起来。

how

什么连接方式,left,right还是outer,inner,不写的话就是inner。

left_on,right_on,left_index,right_index

设置左右的dataframe按照什么列名进行连接,index就是说按照索引名进行连接。

suffixes

这个参数就是说左右的列名一样了,你怎么处理,加什么后缀区分。

data1=pd.DataFrame([{"id":100,"name":'lxh','cs':10},{"id":101,"name":'xiao','cs':40},{"id":102,"name":'hua2','cs':50}])

data2=pd.DataFrame([{"id":0,"name":'lxh','cs':10},{"id":0,"name":'lxh','cs':10},{"id":101,"name":'xiao','cs':40},{"id":102,"name":'hua2','cs':50}])

pd.merge(data1,data2,on='name',how = 'left')

join

前边说了merge类似于sql里的join,那么pandas里多设置一个join是要干嘛。

首先说join的很多参数和merge是一样的,区别就是,join以index作为连接键,默认选择的连接方式是left,还有一处比较特别的是它可以一次join多个dataframe,而merge是不可以的。

merge和join都可以把dataframe写在前边,也就是可以df1.join,df1.merge,我觉得关于这两个直接用merge就行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值