数据处理神器Pandas的相关函数
来源:互联网 发布:淘宝母婴用品批发 编辑:程序博客网 时间:2024/06/08 19:34
最近参加比赛,需要处理各种各样的数据。不得不说,pandas给我带来了很大的方便。困于一直没整理,每一次用到都要查官方文档。现在打算慢慢把用到的函数记录下来,积少成多。
(1)df.value_counts():统计具体某一列相同值的个数
for example:有下面一个表,这个表有300万行,这里只截取一部分举例。我想统计item_id这一列中每一个相同id的个数
代码如下:
import pandas as pddf = pd.read_csv('./train.csv')df['item_id'].value_counts()Out[3]: ###以下是部分统计结果,左边是具体的item_id,右边是该item_id的个数543083 9899549608 9034542524 8511540198 8112550192 7984543092 7459542973 7370542907 7135
如果我想把出现个数最高的前3个item_id统计出来,并保存为数组,该怎么做呢?
代码如下:
import numpy as npnp.array(df['item_id'].value_counts()[:3].keys())Out[6]: array([543083, 549608, 542524], dtype=int64) ###可以看到,结果为上述统计中个数最大的前三个,符合我们的要求
(2) 取dataframe的某几列:df.ix
import pandas as pddf = pd.read_csv('./data.csv',nrows=5) #nrows表示取整个数据集的前5行dt = df.ix[:,5:15] ##这里取df的所有行,第5到14列
(3)将数据集的部分列相加,并添加到最后一列中:
import pandas as pdimport numpy as npdf = pd.read_csv('./data.csv',nrows=5) #nrows表示取整个数据集的前5行dt = df.iloc[:,:].valuesds = np.sum(dt[:,313:],axis=1) #对313列到最后列的所有列求和ds = pd.DataFrame(ds)ds.columns = ['用户浏览各网站之和'] ##添加列名df = pd.concat([df,ds],axis=1) #将新列ds添加到原来的数据集df中
(4)查找含有缺失值的列:df.isnull().any()
import pandas as pddf = pd.read_csv(filename)dt = df.isnull().any()dic = {}for i in range(len(dt)): dic[dt.index[i]] = dt[i]all_nan = []for key,item in dic.items(): if item == True: all_nan.append(key)print (all_nan)
(5)缺失值补全:df.fillna。(注意,fillna默认会返回新对象)
import pandas as pddf = pd.read_csv(filename)df = df.fillna(0) ##对所有缺失值用零补全df = df.fillna(df.mean()) ##对每一列用平均值补全df = df.fillna({'列名':'要补全的值',...}) ##用字典可以对不同的列填充不同的值
(6)如何统计两列元素都相同的样本个数?
举个栗子:我要统计100万个用户使用的手机品牌和手机型号都相同的个数
import pandas as pdimport numpy as npdf = pd.read_csv(filename)#1.先创建一个全为1的列new_col = pd.DataFrame(np.ones(len(df)))new_col.columns = ['one']df = pd.concat([df,new_col],axis=1)#2.统计个数dt = df.groupby(['手机品牌','手机型号']).one.sum()#3.排序d = dt.sort_values()部分结果如下图:
PS:这只是我想到的一个方法,读者如果有更方便的方法,烦请不吝赐教。
(7)对列的每个元素进行处理:map()函数
def crate(x,all_label): if x == 0: return all_label[0] elif x > 0 and x <= 10: return all_label[1] elif x > 10 and x <= 20: return all_label[2] elif x > 20 and x <= 30: return all_label[3] elif x > 30 and x <= 50: return all_label[4] elif x > 50: return all_label[5]all_label = [1,2,3,4,5,6] ##all_label可以是一个随for循环而变化的数组,这里为了简单起见,用一个简单数组代替df['新列名'] = df['列名'].map(lambda x:crate(x,all_label)) ##关键是这一句,lambda后面跟的x是自变量,相当于列中的元素,冒号后面是对每个元素的函数操作。
(8)删除不同的列:
df = df.drop(['a','b'],axis=1) #'a','b'为相应的列名删除连续多列:
df.drop(df.columns[8:308], axis=1,inplace=True)
(9)双重条件下的平均值
举个栗子:我现在有三列:用户年龄段(离散为0-8),用户大致消费水平(离散为0-8),用户的刷卡次数(连续值),我要统计不同年龄段不同消费水平下的平均刷卡次数,并成为新的一列加到原数据中,怎么做呢?
其实原理和求不同年龄段的平均刷卡次数的原理相同,只是在此基础上添加一列。
import pandas as pddt = pd.read_csv(filename)dd = pd.DataFrame(dt.groupby(['年龄段','大致消费水平']).每月的大致刷卡消费次数.mean()).reset_index()dd.columns = ['年龄段','大致消费水平', '平均刷卡次数']dt = dt.merge(dd, on=['年龄段','大致消费水平'], how="left")把每一行中的'大致消费水平'这一项去掉,就是求不同年龄段的平均刷卡次数的方法。
其他求中位数,求和等只要把.mean()换成.median(),.sum()等相应的函数即可。
(10)对所有行或者列求和:
阅读全文
0 0
- 数据处理神器Pandas的相关函数
- python进行数据处理——pandas的drop函数
- Python基于pandas的数据处理
- Python数据处理的瑞士军刀:pandas
- pandas数据处理
- pandas数据处理
- pandas数据处理
- pandas 数据处理
- pandas数据处理
- pandas 数据处理
- ApacheBeam:大数据处理的一大神器!
- 数据处理相关的优化
- json相关的数据处理
- pandas的绘图函数:
- Pandas 的apply函数
- pandas 的groupby函数
- python学习(九)----pandas模块相关函数
- Pandas 数据处理(下)
- poj Apple Catching
- hadoop集群启动顺序
- sxt7.15
- switch、break、continue
- android的jni访问linux原生so
- 数据处理神器Pandas的相关函数
- threejs制作3d模型展示网页
- 《java 多线程编程核心技术》读书笔记一
- “玲珑杯”ACM比赛 Round #18 B -- 数论你还会快速幂【规律】
- sqlcmd用法
- HDU3183 A Magic Lamp
- Qt 执行CMD命令
- 算法题:二叉搜索树与双向链表
- new与delete的运算符重载函数,实现了内存池,节点的申请与开辟