coding过程中的一些小积累

pandas 的一些不常用技巧

2019-01-05  本文已影响0人  徐卜灵

1、pandas 按列值排序

df.sort_values(by=['col_name1','col_name2'] , ascending=False) 

按col_name1和col_name2 排序。排序方式降序。

2、 时间格式解析

from dateutil.parser import parse
a = parse('2018-01-02')
b = parse('20180304')
(b-a).days#days没有括号,426

很方便的解析,注意只能是字符串,而不能是int型

3、列合并pd.concat 和 pd.merge

# 使用concat合并时,index必须一致,否则会合并失败。
df1.reset_index(inplace=True,inplace=True)
df2.reset_index(inplace=True,inplace=True)

frames = [df1,df2]#
heng_concat = pd.concat(frames,axis = 1)#直接拼接到后面
shu_concat = pd.concat(frames,axis = 0)#竖着合并时,需要有相同的列名
default_concat = pd.concat(frames)#默认是竖着合并。
-----------------------------------------------------------
pd.merge(df1,df2,left_on='key1',right_on = 'key2')
有相同的列名是可以直接on = 'key'
pd.merge(df1,df2,on = 'key')
-----------------------------------------------------------
pd.merge(left, right, how='inner', on=None, 
left_on=None, right_on=None, 
left_index=False, right_index=False, 
sort=False, suffixes=('_x','_y'), copy=True)

pd.concat(objs,axis=0,join='outer',
join_axes=None,ignore_index=False,keys=None,
levels=None,names=None,verigy_integrity=False)

4、 在DataFrame中的指定位置插入一列

cols = df.columns.insert(0,'列名')#在第0列的位置增加一列
df.columns = df.reindex(columns = cols)#替换掉原来的列名

还可以这样:

col_name.insert(col_name.index('B')+1,'D') # 在 B 列后面插入D列
df = df.reindex(columns = cols)#替换掉原来的列名
注意:一定要用df.reindex()这个函数,而不能直接用df.columns = cols

其实就是利用列表的插入,来修改列名。

5、pandas修改列名

5.1、暴力修改

df.columns = ['A','B','C','D']#列名要与长度一致

5.2、利用rename修改

df.rename(columns = {df.columns[3]:A},inplace = True)#加上inplace选项 .将第4列的列名修改为A。

6、dataframe 缺失值填充

6.1 均、中、众值填充

df['A'].mean() #均值
df['B'].median()#中值
df['c'].mode()#众值
#众数还有一种填充方式
df['c'].fillna(df['c'].value_counts().index.tolist()[0],inplace = True)#以出现最多的那个值填充

6.2前一个值或后一个值填充

df.fillna(method = 'bfill')#或者method = 'pad'
df.fillna(method = 'ffill',inplace = True)#inpalce 改变元数据

7、去除重复值

drop_duplicates(subset=None, keep='first', inplace=False)[source]

df['A'].drop_duplicates(keep = 'last',inplace = True)#列'A'去除重复值,保留最后一个值。keep = 'first'保留第一个值。

8、删除有Nan的行和列

df.dropna(axis = 0,how = 'any')#也是默认选项。只要有空值,行就被删除
df.dropna(axis = 0,how = 'all')#删除表中所有数据都为Nan的行。
----------------------------
df.dropna(axis = 1,how = 'all')#删除表中所有数据都为Nan的列。
df.dropna(axis = 1,how = 'any')#只要有空值,列就被删除

9、python中的空值:None

如果想设置某一列为空,可以用

df['kong'] = None #注意不是Null或Nan或nan或NaN

10、对某一列转换数据类型

df['A'] = df['A'].astype('str')#列A原来是int类型就可以转为str类型

11、对列内容进行拼接

df['A'].str.cat(df['B'])#就可以把列A和列B数据进行合并。注意要两类分为都为字符串类型
df['A'].str.cat(df['B'],sep='--')#两列间加个分隔符
df['A'].str.cat([df['B'],df['C']],sep = '--')#拼接多列

12、列内容的拆分

df['A'].str.split('-',expand = True)#以-切分

13、设置小数位数,四舍五入

转自https://www.jianshu.com/p/96be2f0162ef)

df['A'].round(decimals = 2)#保留2位
df['B'].map(lambda x:('%.2f')%x)#自定义
df['C'].map(lambda x:format(x,'.2%'))#百分数
df['D'].map(lambda x:format(x,','))#

14、apply() applymap() map()的应用

14.1 当想让方程作用在一维的向量上时,可以使用apply来完成,行列都可以

df['A'].apply(lambda x:'%.2f'%x)

14.2 如果想让方程作用于DataFrame中的每一个元素,可以使用

df[['A','B']].applymap(lambda x: "%.3f"%x))

14.3map()只要是作用将函数作用于一个Series的每一个元素,也就是说智能处理列数据,且返回值是object

df['A'].map(lambda x:format(x,'.2%'))

15.DataFrame重新建立索引

df.reset_index(drop = True)

16.DataFrame范围切片

# 整数切片
df['a'].isin(range(5,8)) #可以取到df中a列的5-8之间的值

# 字符串
df[df['b'].isin(['a','p'])]

# 浮点数

上一篇 下一篇

猜你喜欢

热点阅读