参考链接:pandas中DataFrame操作(一)

文章目录

  • 切片选择
  • loc
  • 行筛选
  • 生成dataframe并写入csv
  • 根据不同分隔符、字符编码等读取csv,并更改列名
  • 写入excel
  • 读excel为DataFrame
  • 排序(降序)
  • ipython中显示dataframe中全部的列与行设置
  • 去重
  • 类型转换
  • 添加一行
  • merge
  • 更改某一列的名
  • groupby 分组后进行筛选,并形成新的df
  • 对于时间的字段拆分处理
  • 更改DataFrame中列的顺序
  • DataFrame一行行遍历
  • 二维list转换成DataFrame
  • APPLY
  • dataframe中将数值型与字符串混杂类型强制转换成数值类型
  • 利用箱式图找出异常值分界线
  • dataframe中判断NAN的方法
  • 时间差计算
  • 按行统计并删除缺失率高于阈值的索引
  • 抽取出身份证信息中的省份
  • 验证手机号所在省份与身份证所在省份是否一致
  • 其他

切片选择

#显示第一行数据
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])

写入excel

writer = pd.ExcelWriter(r'D:\app_credit_cnt_temp_0901.xlsx')
df_write.to_excel(writer, sheet_name='sheet1', index=False)
writer.save()

读excel为DataFrame

 dframe = pd.read_excel(r'D:\app_credit_cnt_temp_0901.xlsx', sheetname='sheet1')

排序(降序)

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.monthtrain['pickup_day'] = train['pickup_datetime'].dt.daytrain['pickup_hour'] = train['pickup_datetime'].dt.hourtrain['pickup_minute'] = train['pickup_datetime'].dt.minute#看看是一星期中的星期几
train['dayofweek'] = train['pickup_datetime'].dt.dayofweek+1
#一年中的第几个星期
train['pickup_weekofyear'] = train['pickup_datetime'].dt.weekofyeartrain['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即可
  1. dataFrame中两列快速计算天数差
stat buy_date
0 2020-09-01
1 2020-09-01
2 2020-09-01
3 2020-09-01
4 2020-09-01

#默认数据格式yy-mm-dd形式,不同形式的可以添加形式标准,按列统一转换速度非常快,即便是1000万条数据,一秒中完毕;如果用列表推导式,好几个小时都计算不完毕。

df['days']=(pd.to_datetime(df['buy_date'])-pd.to_datetime(df['stat'])).dt.days

按行统计并删除缺失率高于阈值的索引

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.nanelse:if x.strip()==y.strip():return 1else: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方法–Python&MySQL

Pandas中的实用dataframe操作汇总(持续更新中)相关推荐

  1. YOLO 3/4/5/6/7/x、Efficient、MaskRcnn、FasterRcnn、FCOS、SSD、M2Det、Retina、CenterNet、PicoDet等系列数据模型汇总持续更新中

    做了很长时间的CV领域的任务了,见到了很多不错的项目,很多时候也是会选择直接拿来开源的项目去使用,自己也做过了很多项目,后面就萌生了一个想法,将看到的不错的文章或者是数据集或者是项目汇总记录一下,以便 ...

  2. 技术问题收集整理汇总——持续更新中...

    此文章的目的是收集自己在网上看到的不错的文章或帖子,并将这些文章的索引统一收集在这里,并持续更新中....大家有好的东西也可以分享过来哦! 1.关于java为什么要使用继承(或java使用继承有什么用 ...

  3. Java知识点汇总 持续更新中~~~

    一.什么是面向对象? 是基于面向过程而言,面向对象是将功能通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节. 二.标识符的格式? 1.可以使用字母.数字._.$来组成,不能使用特殊符号. ...

  4. [Linux] Linux指令汇总(持续更新中...)

    写在前面: 以前真心没有玩过Linux系统,总感觉整天摆弄Linux的同学都是大牛.如今,在公司里实习需要远程登录Linux服务器,所有的代码都要在开发板上完成,所以被逼无奈也不得不定下心来好好学学L ...

  5. 软件编程学习网站汇总——持续更新中

    持续更新各种国内外关于编程语言学习及讨论的网站,有时间我会添加介绍,不过相信很多网站你们都熟悉了,喜欢的可以收藏,我也留着等以后需要的时候翻阅. 若链接有错误,提醒我下,我来改正.有其他好的站也可以推 ...

  6. MySQL数据库报错汇总(持续更新中)

    报错1:DATA truncated FOR COLUMN 'description' AT ROW 1 错误再现 表中存在null字段 此时,修改表中某字段为主键 解决方法 不允许数据库中出现nul ...

  7. iOS中容易混淆的知识点(持续更新中)

    1.成员变量和属性的区别 @interface Person : NSObject {NSString *_sex; } @property (nonatomic, copy) NSString *n ...

  8. html css js知识整理,Html+Css+Js实用知识汇总(持续更新中...)

    Html篇 基本概念: html:超文本标记语言(Hyper Text Markup Language) html5:下一代的html xhtml:更严谨更纯净的html 表头 网站标题 //页面编码 ...

  9. 银屑病缺乏的营养汇总(持续更新中)

    根据[1],银屑病缺乏维生素和矿物元素是果,并不是因. 例如,我有脂溢性皮炎,缺维生素B,然后我补充这个,之后即使脂溢性皮炎好了,我的银屑病依然没好. 所以补充维生素至多只能治表,不能治根. [2]还 ...

最新文章

  1. java创建请求拦截器_80.简单Retrofit+RxJava+日志拦截器结合使用
  2. 白色flash模块代码_适用于MCU项目的代码框架BabyOS,工程师的好助手!
  3. 解读ImageView的wrap_content和adjustViewBounds的工作原理
  4. linux编译mmc驱动,Embeded linux之MMC驱动
  5. 一行代码揭开CPU执行原理
  6. mac nginx加载php 配置,Mac下Nginx安装环境配置详解
  7. SpringCloud Sleuth + zipkin 实现微服务链路追踪功能
  8. 【英语学习】【English L06】U08 News L4 A piece of great news
  9. 学习腾讯的hover效果
  10. 【C++】C++类和对象
  11. HTML实现百度换肤
  12. OEM 10g R5 online documentation
  13. 基于Linux Rational Performance Tester自动化测试研究
  14. java myeclipse的好处,关于MyEclipse_MyEclipse用途_MyEclipse优势
  15. linux下xz格式,linux下 x.tar.xz格式文件的解压方法
  16. 范畴论-一个单子(Monad)说白了不过就是自函子范畴上的一个幺半群而已
  17. 【PA2011】Kangaroos
  18. 【记录贴】联想笔记本小新进入BIOS的方法
  19. 【xbox开发】unity3d xbox one手柄键位
  20. ElementUI引入自定义图标

热门文章

  1. 如何查询某个会议或者期刊是否被EI收录
  2. 入职6个月,被裁了...
  3. OpenCV车辆追踪学习笔记
  4. 【在线SPSS】数据分析思维培养系列3:分析思路篇
  5. 初等数论--同余方程--同余方程的解
  6. 深度学习分类基础概念对ACC、PPV、TPR、TNR
  7. 转换 FLAC、APE 无损音乐格式为 iTunes 支持导入的 M4A 格式
  8. char[]字符数组使用toString变为乱码的原因(其实不是乱码,是“类名+@+地址”)
  9. 中望3d快捷键命令大全_3dMAX常用快捷键命令大全
  10. 13.2.1 访问世界银行的数据