切片选择

#显示第一行数据
print(df.head(1))

#显示倒数三行数据

print(df.tail(3))

loc 

df.loc[row_index,col_index]  注意loc是根据行和列的索引进行选择的,行索引就是index,列索引就是列名。

loc举例:

df.loc[0,'age']=18 就能定位行索引为0,列名为‘age’的元素,然后可以直接赋值

df.loc[df.id=109,'age'] 这个就是找到id为109的索引号,然后列名还是age的元素,总之row_index可以直接填写索引号,也可以根据条件进行筛选查找

df.loc[(df.id>1)&(df.id<100),'label']=1 这个就是根据条件批量查找,然后批量赋值

iloc第一个参数表示前多少行,第二个参数表示多少列,与行索引列索引没有任何关系,完全是前多少行

print(df[0:3])                  选取前三行

print(df.iloc[1:3,1:3])          类似于octave选择行列

print(df.iloc[1:3,-1:])    选取最后一列

df.iloc[:,1:3]                       同octave

df.iloc[1:3,:]        同octave

行筛选

df1:

日本
荷兰

df2:

eng_name,chn_name
a, 中国
b,美国
c,日本
d,瑞典
f,荷兰

根据df1筛选df2:isin(), 括号里面对应的是list

df2[df2.chn_name.isin(df1[0].tolist())]

如果是反向选择,则[]里面最前面加一个-号即可

df2[-df2.chn_name.isin(df1[0].tolist())]

#截断极值,因为极值有时候可以认为是异常数值,会干扰模型的参数
ulimit = np.percentile(train.price_doc.values, 99)
llimit = np.percentile(train.price_doc.values, 1)

train['price_doc'].loc[train['price_doc']>ulimit] = ulimit
train['price_doc'].loc[train['price_doc']<llimit] = llimit

all_data[all_data['state']==33]     #筛选state=33的行

df[(df.age>=20)&(df.age<28)]  #注意一定要带()

生成dataframe并写入csv

output = pd.DataFrame({'id': id_test, 'price_doc': y_predict})
output.to_csv('output.csv', index=False)

#一列写入的时候,要用双[],否则会当做series没有列名。

df_header[['eng_name']].to_csv('C:\\data\\hyg\\predict_score\\eng_feature.csv',index=False)

根据不同分隔符、字符编码等读取csv,并更改列名

data_header = pd.read_csv('a.csv',encoding='gb2312',header=None,sep='\t')
df = pd.read_csv('b.csv',encoding='utf-8',header=None,sep='\t')
df.columns=list(data_header[0])

 排序(降序)

df_6=df_6.sort_values('xgb_score',ascending=False)

ipython中显示dataframe中全部的列与行设置

pd.set_option('max_columns', 1000)

pd.set_option('max_rows', 1000)

去重

df.drop_duplicates(["Seqno"],keep="first").head()

df.drop_duplicates(subset=None, keep='first', inplace=False)

1 data.drop_duplicates()#data中一行元素全部相同时才去除

2 data.drop_duplicates(['a','b'])#data根据’a','b'组合列删除重复项,默认保留第一个出现的值组合。传入参数keep='last'则保留最后一个

类型转换

df.age=df['age'].astype(np.int)  #注意一定要赋值过去,否则不起效

添加一行

tmp.loc[11]=('其它',300)

merge

1)len(set(df_a.eng_name)&set(df_b.eng_name))   #merge前根据某一列做key计算一下有多少个交集

2)res = pd.merge(df_a, df_b,on=['eng_name'],how='left')   #on表示merge的key,how表示连接方式,默认是inner,left表示以左侧df为准,右侧没有的值为na。

3)左右键值不一样:pd.merge(df_a, df_b,left_on='k1',right_on='k2',how='left')

更改某一列的名

df3.rename(columns={'user_id':'用户ID'}, inplace = True)

df.rename(columns=lambda x:x.replace('yhhx_result.',''), inplace=True)  #统一去掉列名的某个前缀

groupby 分组后进行筛选,并形成新的df

df_group_small = pd.DataFrame(columns=df.columns)
df_group_large = pd.DataFrame(columns=df.columns)
for k in set(group.keys):
if len(group.get_group(k))<3:
  df_group_small=pd.concat([df_group_small,group.get_group(k)])
else:
  df_group_large=pd.concat([df_group_large,group.get_group(k)])

 对于时间的字段拆分处理

train = pd.read_csv('train.csv', header=0,parse_dates=['pickup_datetime'])#读取文件的时候parse_dates必须要加上

train['pickup_month'] = train['pickup_datetime'].dt.month

train['pickup_day'] = train['pickup_datetime'].dt.day

train['pickup_hour'] = train['pickup_datetime'].dt.hour

train['pickup_minute'] = train['pickup_datetime'].dt.minute

#看看是一星期中的星期几
train['dayofweek'] = train['pickup_datetime'].dt.dayofweek+1
#一年中的第几个星期
train['pickup_weekofyear'] = train['pickup_datetime'].dt.weekofyear train['pickup_dt'] = (train['pickup_datetime'] - train['pickup_datetime'].min()).dt.total_seconds()
#一星期中的第多少个小时
train['pickup_week_hour'] = train['dayofweek'] * 24 + train['pickup_hour']

 更改DataFrame中列的顺序

mid = df['Mid']
df.drop(labels=['Mid'], axis=1,inplace = True)
#重新插入到最前面,以达到更改列顺序的目的
df.insert(0, 'Mid', mid) DataFrame一行行遍历

for row in t.itertuples(index=True, name='Pandas'):
  id=getattr(row, 'USRID')
  diff=getattr(row, 'diff')

或者

for _, row in df_header.iterrows():
  eng_name,chn_name=row#比如有两列就可以这样直接对应赋值了,上面的_作为占位符,可以去掉index号

二维list转换成DataFrame

df=pd.DataFrame(recall_list,columns=['TOP30%','TOP35%','TOP40%','TOP45%','TOP50%'])

APPLY 

Apply将一个函数应用于指定轴上的每一个元素。 使用Apply,可以将DataFrame列(是一个Series)的值进行格式设置和操作,不用循环,非常有用!

dataframe中将数值型与字符串混杂类型强制转换成数值类型

df['username']=pd.to_numeric(df['username'],errors='coerce')   #将不能转换数据类型的值强制转换成NaN

利用箱式图找出异常值分界线

data=pd.DataFrame({'a':[1,2,3,4,3,4,45,67]})
p=data[['a']].boxplot(return_type='dict')
y=p['fliers'][0].get_ydata()
y.sort()
y[0]
输出:
y=[45,67]

dataframe中判断NAN的方法

for v in df['a']:

if pd.isnull(v)

时间差计算

1)出生日期转换为年龄方法

import datetime as dt
now_year=dt.datetime.today().year
df['出生日期']=pd.to_datetime(df['出生日期'],format='%Y%m%d',errors='coerce) #当前是什么格式format就写什么格式
df['age']=now_year-df['出生日期'].dt.year
2)天数计算
 
 3)日期加减天数
import datetime
#日期加50天,自动转化为所需要格式的日期
(pd.to_datetime('2019-05-30',format='%Y-%m-%d')+datetime.timedelta(days=50)).strftime('%Y-%m-%d')
#如果是减去50天,则days=-50即可
按行统计并删除缺失率高于阈值的索引
def get_missRow_byThreshold(df,threshold):
indexs=[]
for index,row in df.iterrows():
rowMissRate=sum(pd.isnull(x) for x in row.values)/len(row.values) #一行一行拆分看缺失值情况
if rowMissRate>=threshold:
indexs.append(index)
return indexs #返回索引号后,进行删除,删除缺失率高于0.8的行
indexs=get_missRow_byThreshold(df,0.8)
df.drop(indexs,inplace=True)

抽取出身份证信息中的省份

def fun(x):
if not x is np.nan:
x = x.strip().split('省')[0].split('自治')[0].split('维吾尔')[0].split('壮族')[0].split('回族')[0].split('市')[0]
return x
df['id_prov'] = df['身份证归属地'].map(fun)

验证手机号所在省份与身份证所在省份是否一致

def is_identity(x,y):
if pd.isnull(x) or pd.isnull(y):
return np.nan
else:
if x.strip()==y.strip():
return 1
else:
return 0
df['province_identity']=list(map(lambda x,y:is_identity(x,y),df['id_prov'],df['手机号归属省份']))
df['city_identity']=list(map(lambda x,y:is_identity(x,y),df['id_city'],df['手机号归属城市']))

pandas中DataFrame使用的更多相关文章

  1. Pandas中DataFrame修改列名

    Pandas中DataFrame修改列名:使用 rename df = pd.read_csv('I:/Papers/consumer/codeandpaper/TmallData/result01- ...

  2. Spark与Pandas中DataFrame对比

      Pandas Spark 工作方式 单机single machine tool,没有并行机制parallelism不支持Hadoop,处理大量数据有瓶颈 分布式并行计算框架,内建并行机制paral ...

  3. pandas中DataFrame的ix,loc,iloc索引方式的异同

    pandas中DataFrame的ix,loc,iloc索引方式的异同 1.loc: 按照标签索引,范围包括start和end 2.iloc: 在位置上进行索引,不包括end 3.ix: 先在inde ...

  4. Spark与Pandas中DataFrame对比(详细)

      Pandas Spark 工作方式 单机single machine tool,没有并行机制parallelism不支持Hadoop,处理大量数据有瓶颈 分布式并行计算框架,内建并行机制paral ...

  5. pandas中DataFrame对象to_csv()方法中的encoding参数

    当使用pd.read_csv()方法读取csv格式文件的时候,常常会因为csv文件中带有中文字符而产生字符编码错误,造成读取文件错误,在这个时候,我们可以尝试将pd.read_csv()函数的enco ...

  6. pandas中DataFrame和Series的数据去重

    在SQL语言中去重是一件相当简单的事情,面对一个表(也可以称之为DataFrame)我们对数据进行去重只需要GROUP BY 就好. select custId,applyNo from tmp.on ...

  7. pandas中DataFrame重置设置索引

    在pandas中,经常对数据进行处理 而导致数据索引顺序混乱,从而影响数据读取.插入等. 小笔总结了以下几种重置索引的方法: import pandas as pd import numpy as n ...

  8. pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)

    数据介绍 先随机生成一组数据: import pandas as pd import numpy as np state = ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'N ...

  9. Pandas中DataFrame数据合并、连接(concat、merge、join)之merge

    二.merge:通过键拼接列 类似于关系型数据库的连接方式,可以根据一个或多个键将不同的DatFrame连接起来. 该函数的典型应用场景是,针对同一个主键存在两张不同字段的表,根据主键整合到一张表里面 ...

随机推荐

  1. 调度的log 1.5ms 12ms 4ms

    36   37   38            loopM 24369 [001] 60789.192708: sched:sched_switch: prev_comm=loopM prev_pid ...

  2. 从实战角度浅析snmp

    Snmp  Simple Network Management Protocol Snmp最终是为五花八门的网管软件服务的,由于接触的网管软件较少,所以对snmp的理解至今还仅限于初级配置阶段.以下言 ...

  3. Java基础之开关语句详解

    switch 语句是单条件多分支的开关语句,它的一般格式定义如下(其中break语句是可选的): switch(表达式) { case 常量值: 若干个语句 break; case  常量值: 若干个 ...

  4. html的body内标签之图片及表格

    <li> list 标签定义和用法: <li> 标签定义列表项目. <li> 标签可用在有序列表 (<ol>) 和无序列表 (<ul>) 中 ...

  5. 2016 China Final E - Bet

    /************************************************************************* > File Name: E.cpp > ...

  6. 38 一次 redis 连接泄露的原因 以及 ShardedJedisPool

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u011039332/article/details/85381051前言 这个是接着 上次的 这篇文 ...

  7. Android Bitmap和Drawable互转及使用BitmapFactory解析图片流

    一.Bitmap转Drawable Bitmap bmp=xxx; BitmapDrawable bd=new BitmapDrawable(bmp); 因为BtimapDrawable是Drawab ...

  8. BZOJ4557:[JLOI2016/SHOI2016]侦察守卫——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4557 小R和B神正在玩一款游戏.这款游戏的地图由N个点和N-1条无向边组成,每条无向边连接两个点, ...

  9. BZOJ1502:[NOI2005]月下柠檬树——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=1502 https://www.luogu.org/problemnew/show/P4207 李哲 ...

  10. BZOJ2002:[HNOI2010]弹飞绵羊——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2002 https://www.luogu.org/problemnew/show/P3203 某天, ...