pandas一些高效的操作

记录一些学习到的pandas操作技巧,能大大精简代码

1. OneHot编码
  • 生成OneHot编码特征
    actionType = pd.get_dummies(df['actionType'], prefix='actionType', prefix_sep='_')
  1. prefix表示OneHote编码特征的命名前缀
  2. prefix_sep表示连接前缀与特征值的符号,默认为下划线
    生成的特征名例如:“actionType_1”
  • 批量选择OneHot编码特征
        df['actionType_{}'.format(column)] #column表示列的编号
2. 时间戳转为标准本地时间格式

时间戳:从 1970 年 1 月 1 日 00:00:00 到现在的秒数

先定义一个转换操作的方法

import time
def time_conv(x):
    timeArray=time.localtime(x)
    otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
    return otherStyleTime

再利用pandas中Series格式内置的map方法将该操作应用到每一行

df.Time = pd.to_datetime(df.Time.map(lambda x: time_conv(x)),format="%Y-%m-%d %H:%M:%S")

例如:1503443585 转化为 2017-08-23 07:13:05

3. 特征数值化
df['province'] = df['province'].map(list(df['province'].unique()).index)
特征1 province 特征2
江西
重庆
上海
重庆

按上面代码操作,特征集里的province列则替换为

特征1 province 特征2
0
1
2
1
4. 数据分组聚合过程中agg模块的使用
  • 使用内置的标准聚合函数
df = DataFrame({'key1':['a','a','b','b','a'],'key2':['one','two','one','two','one'],
'data1':np.random.randn(5),'data2':np.random.randn(5)}) 
#生成一个dataframe表
grouped = df[['data1','data2']].groupby(df['key1'])['data1'].agg({'key1_count':'count','data1_mean':'mean'}) 
#以key1为关键字进行分组,统计分组后的key1值的个数和data1的平均值
#使用字典进行重命名,'count'、'mean'为内置的标准操作函数

标准操作函数有:

count 分组中非NA值得数量
sum 非NA值得和
mean 非NA值得平均值
median 非NA值得算术中位数
std、var 无偏(分母为n-1)标准差和方差
min、max 非NA值得最小值和最大值
prod 非NA值的积
first、last 第一个和最后一个非NA值
  • 自定义的聚合函数
def func(arr):
    return arr.max() - arr.min()
grouped = df[['data1','data2']].groupby(df['key1'])['data1'].agg({'max-min':func})
#利用自定义的func求得按key1得到的分组中每一组data1值的的最大值减最小值
#使用字典进行重命名
5. applymap函数的运用

applymap与上面做特征数值化运用的map类似,前者是针对DataFrame,后者针对Series
例如定义一个将空值设置为0的func函数

def func(x):
    try:
        return float(x)
    except:
        if x == 'NaN':
            return 0
        else:
            return x

使用applymap方法对dataframe表中每一个值调用该函数

data.applymap(func)                  #与data.fillna(0,inplace=True)基本等价
6. 选取类别型的特征与数值型的特征
cate_columns = data.select_dtypes(include=['object']).columns
num_columns = data.select_dtypes(exclude=['object']).columns

pandas中针对dataframe内置了select_dtypes函数!!!

7. 删除列的三种方式
del data[列名]
del data.列名
data.drop(['列名'], axis=1, inplace=True) 
data.drop([[列的编号]], axis=1)
8. 修改列名
df.rename(columns={'old列名1':'new列名1','old列名2':'new列名2'},inplace=True)
9. 组内排序
df_sorted = df.groupby('userid',as_index=False).apply(lambda x:x.sort_values('orderTime', ascending=False)) #按最近的时间开始排序
    #userid表示Dataframe中用来分组的特征
    #orderTime:表示Dataframe表中用来排序的特征
10. 使用lambda遍历dataframe行
def func(x,y):
   return x - y

#df里面有两列名为x和y
df['x-y'] =  df.apply(lambda row: func(row['x'], row['y'] ), axis=1)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容