10招!看骨灰级Pythoner玩转Python的方法


Posted in Python onApril 15, 2019

pandas是基于numpy构建的,使数据分析工作变得更快更简单的高级数据结构和操作工具。本文为大家带来10个玩转Python的小技巧,学会了分分钟通关变大神!

10招!看骨灰级Pythoner玩转Python的方法

1. read_csv

每个人都知道这个命令。但如果你要读取很大的数据,尝试添加这个参数:nrows = 5,以便在实际加载整个表之前仅读取表的一小部分。然后你可以通过选择错误的分隔符来避免错误(它不一定总是以逗号分隔)。

(或者,你可以在linux中使用'head'命令来检查任何文本文件中的前5行,例如:head -c 5 data.txt)

然后,你可以使用df.columns.tolist()来提取列表中的所有列,然后添加usecols = ['c1','c2',...]参数以加载所需的列。此外,如果你知道几个特定列的数据类型,则可以添加参数dtype = {'c1':str,'c2':int,...},以便数据加载得更快。此参数还有另一个优点,如果你有一个同时包含字符串和数字的列,那么将其类型声明为字符串是一个好选择,这样就可以在尝试使用此列作为键去合并表时不会出错。

2. select_dtypes

如果必须在Python中进行数据预处理,那么这个命令可以节约一些时间。读取表后,每列的默认数据类型可以是bool,int64,float64,object,category,timedelta64或datetime64。你可以先查看

df.dtypes.value_counts()

命令分发的结果以了解数据帧的所有可能数据类型,然后执行

df.select_dtypes(include = ['float64','int64'])

选择仅具有数字特征的子数据帧。

3. Copy

这是一个重要的命令。如果执行以下命令:

import pandas as pd 
df1 = pd.DataFrame({ ‘a':[0,0,0], ‘b': [1,1,1]}) 
df2 = df1 
df2[‘a'] = df2[‘a'] + 1 
df1.head()

你会发现df1已经改变了。这是因为df2 = df1没有复制df1的值并将其分配给df2,而是设置指向df1的指针。因此,df2的任何变化都会导致df1发生变化 要解决这个问题,你可以:

df2  
= df1.copy() 
br

或者

from copy import deepcopy 
df2 = deepcopy(df1)

4. Map

这是一个可以进行简单数据转换的命令。首先定义一个字典,其中'keys'是旧值,'values'是新值。

level_map = {1: ‘high', 2: ‘medium', 3: ‘low'} 
df[‘c_level'] = df[‘c'].map(level_map)

举几个例子:True,False为1,0(用于建模); 定义水平; 用户定义的词法编码。

5. apply or not apply?

如果我们想创建一个新的列,并将其他列作为输入,那么apply函数有时非常有用。

def rule(x, y): 
  if x == ‘high' and y > 10: 
     return 1 
  else: 
     return 0 
df = pd.DataFrame({ 'c1':[ 'high' ,'high', 'low', 'low'], 'c2': [0, 23, 17, 4]}) 
df['new'] = df.apply(lambda x: rule(x['c1'], x['c2']), axis = 1) 
df.head()

在上面的代码中,我们定义了一个带有两个输入变量的函数,并使用apply函数将其应用于列'c1'和'c2'。

但“apply函数”的问题是它有时太慢了。 如果你想计算两列“c1”和“c2”的最大值,你可以:

df[‘maximum'] = df.apply(lambda x: max(x[‘c1'], x[‘c2']), axis = 1)

但你会发现它比这个命令慢得多:

df[‘maximum'] = df[[‘c1','c2']].max(axis =1)

注意:如果可以使用其他内置函数完成相同的工作(它们通常更快),请不要使用apply。例如,如果要将列'c'舍入为整数,请执行round(df ['c'],0)而非使用apply函数:

df.apply(lambda x: round(x['c'], 0), axis = 1)

6. value counts

这是一个检查值分布的命令。例如,如果你想检查“c”列中每个值的可能值和频率,可以执行以下操作

df[‘c'].value_counts()

它有一些有用的技巧/参数:

A. normalize = True:如果你要检查频率而不是计数。

B. dropna = False:如果你要统计数据中包含的缺失值。

C. df['c'].value_counts().reset_index():  如果你想将stats表转换成pandas数据帧并进行操作。

D. df['c'].value_counts().reset_index().sort_values(by='index') : 显示按值而不是按计数排序的统计数据。

7. 缺失值的数量

构建模型时,你可能希望排除具有很多缺失值或全是缺失值的行。你可以使用.isnull()和.sum()来计算指定列中缺失值的数量。

import pandas as pd 
import numpy as np 
df = pd.DataFrame({ ‘id': [1,2,3], ‘c1':[0,0,np.nan], ‘c2': [np.nan,1,1]}) 
dfdf = df[[‘id', ‘c1', ‘c2']] 
df[‘num_nulls'] = df[[‘c1', ‘c2']].isnull().sum(axis=1) 
df.head()

8. 选择具有特定ID的行

在SQL中,我们可以使用SELECT * FROM ... WHERE ID('A001','C022',...)来获取具有特定ID的记录。如果想用Pandas做同样的事情,你可以

dfdf_filter = df[‘ID'].isin([‘A001',‘C022',...]) 
df[df_filter]

9. Percentile groups

你有一个数字列,并希望将该列中的值分类为组,例如将列的前5%,分为组1,前5-20%分为组2,前20%-50%分为组3,最后50%分为组4。当然,你可以用pandas.cut来做,但这里提供另一个选择:

import numpy as np 
cut_points = [np.percentile(df[‘c'], i) for i in [50, 80, 95]] 
df[‘group'] = 1 
for i in range(3): 
  df[‘group'] = df[‘group'] + (df[‘c'] < cut_points[i]) 
# or <= cut_points[i]

这个指令使计算机运行的非常快(没有使用应用功能)。

10. to_csv

这也是每个人都会使用的命令。这里指出两个技巧。 第一个是

print(df[:5].to_csv())

你可以使用此命令准确地打印出写入文件的前五行数据。

另一个技巧是处理混合在一起的整数和缺失值。如果列同时包含缺失值和整数,则数据类型仍将是float而不是int。导出表时,可以添加float_format ='%。0f'将所有浮点数舍入为整数。如果只想要所有列的整数输出,请使用此技巧,你将摆脱所有令人苦恼的'.0'。

总结

以上所述是小编给大家介绍的10招!看骨灰级Pythoner玩转Python的方法 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python实现批量下载文件
May 17 Python
python 获取网页编码方式实现代码
Mar 11 Python
详解tensorflow实现迁移学习实例
Feb 10 Python
python pandas dataframe 行列选择,切片操作方法
Apr 10 Python
Django中使用Celery的方法示例
Nov 29 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
Nov 15 Python
解决pycharm上的jupyter notebook端口被占用问题
Dec 17 Python
Pytorch Tensor 输出为txt和mat格式方式
Jan 03 Python
Python基于yield遍历多个可迭代对象
Mar 12 Python
在Python中实现字典反转案例
Dec 05 Python
python实现三阶魔方还原的示例代码
Apr 28 Python
利用Python脚本写端口扫描器socket,python-nmap
Jul 23 Python
Python后台开发Django会话控制的实现
Apr 15 #Python
浅析Python 实现一个自动化翻译和替换的工具
Apr 14 #Python
提升Python程序性能的7个习惯
Apr 14 #Python
Python根据当前日期取去年同星期日期
Apr 14 #Python
Python实现的微信支付方式总结【三种方式】
Apr 13 #Python
Python实现合并excel表格的方法分析
Apr 13 #Python
Python Image模块基本图像处理操作小结
Apr 13 #Python
You might like
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
2010/04/28 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
URL编码转换,escape() encodeURI() encodeURIComponent()
2006/12/27 Javascript
javascript 获取图片颜色
2009/04/05 Javascript
JQuery的一些小应用收集
2010/03/27 Javascript
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
2013/04/01 Javascript
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
浅析tr的隐藏和显示问题
2014/03/05 Javascript
判断日期是否能跨月查询的js代码
2014/07/25 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
JavaScript仿百度图片浏览效果
2016/11/23 Javascript
jquery编写日期选择器
2017/03/16 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
2018/11/26 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
2019/06/05 Javascript
对Layer弹窗使用及返回数据接收的实例详解
2019/09/26 Javascript
jQuery实现的上拉刷新功能组件示例
2020/05/01 jQuery
Python中正则表达式的详细教程
2015/04/30 Python
利用python获取某年中每个月的第一天和最后一天
2016/12/15 Python
Python 详解基本语法_函数_返回值
2017/01/22 Python
python 中的int()函数怎么用
2017/10/17 Python
如何使用Python进行OCR识别图片中的文字
2019/04/01 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
如何基于python实现年会抽奖工具
2020/10/20 Python
html5文本内容_动力节点Java学院整理
2017/07/11 HTML / CSS
PatPat德国:妈妈的每日优惠
2019/10/02 全球购物
德国帽子专家:Hutshopping
2019/11/03 全球购物
高级文秘工作总结的自我评价
2013/09/28 职场文书
年会活动策划方案
2014/01/23 职场文书
银行批评与自我批评
2014/02/10 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis
vue实现简易音乐播放器
2022/08/14 Vue.js