pandas或者字段值_pandas最常⽤的操作
1.对列进⾏重命名
两种⽅法:
rename
注意两点,columns这个参数名不能丢,columns后边跟字典,想改哪个改哪个
.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']._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']})
groupby的作⽤是按照某个字段进⾏分组,这个语法本⾝并不难,但是写法⽐较多,容易弄混。
推荐写法,都按照这个⽅法写不容易弄混。groupby括号⾥直接写column的名字,如果是多个字段分组,⽤中括号扩起来。然后要统计的字段直接⽤点接上,如果好⼏个字段,加个apply或者agg也⾏。
dfname[ziduan].groupby(dfname[]).sum()
这个写法直接把要统计的字段写在前边,groupby的时候要把dfname再写上否则报错。
groupby以后这个dataframe的index就变了,需要reset_jndex⼀下才⾏。
9.计数操作
为啥把这个拿出来说呢,因为计数的需求很迷,和sum、avg完全不⼀样,⽐较常见的其实就两个需求。
统计某⼀列有⼏个元素(去重)
为啥去重,不去重没啥意义啊,不多说(⽐如说useid这个字段有⼏个不同的值)。
个⼈觉得优先使⽤第⼆个函数,然后这个还有个unique会把元素都给你返回来。
统计某⼀列某个元素出现⼏次
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]})
groupby是什么函数
这⾥两个地⽅容易犯错:
你要拼接的两个df没有⽤中括号括起来,pd.merge(df1,df2);
你⽤df去调⽤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}])
<(data1,data2,on='name',how = 'left')
join
前边说了merge类似于sql⾥的join,那么pandas⾥多设置⼀个join是要⼲嘛。
⾸先说join的很多参数和merge是⼀样的,区别就是,join以index作为连接键,默认选择的连接⽅式是left,还有⼀处⽐较特别的是它可以⼀次join多个dataframe,⽽merge是不可以的。
merge和join都可以把dataframe写在前边,也就是可以df1.,我觉得关于这两个直接⽤merge就⾏。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。