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之for循环语句
Oct 02 Python
Python编写一个闹钟功能
Jul 11 Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 Python
python 3调用百度OCR API实现剪贴板文字识别
Sep 04 Python
对Python 中矩阵或者数组相减的法则详解
Aug 26 Python
如何在django中添加日志功能
Feb 06 Python
pytorch:model.train和model.eval用法及区别详解
Feb 20 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
Apr 10 Python
Elasticsearch py客户端库安装及使用方法解析
Sep 14 Python
python openssl模块安装及用法
Dec 06 Python
Python Socket多线程并发原理及实现
Dec 11 Python
Numpy中的数组搜索中np.where方法详细介绍
Jan 08 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 ss7.5的数据调用 (笔记)
2010/03/08 PHP
php的一些小问题
2010/07/03 PHP
Codeigniter发送邮件的方法
2015/03/19 PHP
php redis实现文章发布系统(用户投票系统)
2017/03/04 PHP
PHP获取链表中倒数第K个节点的方法
2018/01/18 PHP
YUI 读码日记之 YAHOO.util.Dom - Part.1
2008/03/22 Javascript
js过滤数组重复元素的方法
2010/09/05 Javascript
为jQuery增加join方法的实现代码
2010/11/28 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
2014/12/12 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
ionic js 模型 $ionicModal 可以遮住用户主界面的内容框
2016/06/06 Javascript
用jQuery向div中添加Html文本内容的简单实现
2016/07/13 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
利用iscroll4实现轮播图效果实例代码
2017/01/11 Javascript
jquery实现轮播图效果
2017/02/13 Javascript
JavaScript中使用Async实现异步控制
2017/08/15 Javascript
angular4 如何在全局设置路由跳转动画的方法
2017/08/30 Javascript
深入浅析AngularJs模版与v-bind
2018/07/06 Javascript
Angular通过指令动态添加组件问题
2018/07/09 Javascript
vue项目中实现的微信分享功能示例
2019/01/21 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
[01:02:32]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第二场 2月26日
2021/03/11 DOTA
windows下python模拟鼠标点击和键盘输示例
2014/02/28 Python
Python函数嵌套实例
2014/09/23 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
2017/11/23 Python
Python实现快速计算词频功能示例
2018/06/25 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
Python爬取网站图片并保存的实现示例
2021/02/26 Python
私有程序集与共享程序集有什么区别
2013/04/05 面试题
C#实现启动一个进程
2016/10/01 面试题
经典优秀个人求职信分享
2013/12/12 职场文书
宿舍保安职务说明书
2014/02/25 职场文书
超市员工管理制度
2015/08/06 职场文书
Nginx内网单机反向代理的实现
2021/11/07 Servers