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

pandas是基于numpy构建的,使数据分析工作变得更快更简单的高级数据结构和操作工具。本文为大家带来10个玩转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的方法 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

(0)

相关推荐

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

    pandas是基于numpy构建的,使数据分析工作变得更快更简单的高级数据结构和操作工具.本文为大家带来10个玩转Python的小技巧,学会了分分钟通关变大神! 1. read_csv 每个人都知道这个命令.但如果你要读取很大的数据,尝试添加这个参数:nrows = 5,以便在实际加载整个表之前仅读取表的一小部分.然后你可以通过选择错误的分隔符来避免错误(它不一定总是以逗号分隔). (或者,你可以在linux中使用'head'命令来检查任何文本文件中的前5行,例如:head -c 5 data.

  • 玩转Python发短信的实现

    日常运维工作中,通常是邮件报警机制,但邮件可能不被及时查看,导致问题出现得不到及时有效处理.所以想到用Python实现发短信功能,当监控到问题出现时,短信报警,使问题能得到及时的处理.当然,我相信,用Python发短信应用场景不止此一处,下面我们开始Python发短信的实现. 首先,看下成果展示: 然后,看下代码实现: 是不是非常简单! 现在开始具体讲解,如何实现Python发短信功能. 操作步骤 1.安装模块 twilio pip install twilio 2.申请获得twilio的API

  • Python魔术方法详解

    介绍 此教程为我的数篇文章中的一个重点.主题是魔术方法. 什么是魔术方法?他们是面向对象的Python的一切.他们是可以给你的类增加"magic"的特殊方法.他们总是被双下划线所包围(e.g. __init__ 或者 __lt__).然而他们的文档却远没有提供应该有的内容.Python中所有的魔术方法均在Python官方文档中有相应描述,但是对于他们的描述比较混乱而且组织比较松散.很难找到有一个例子(也许他们原本打算的很好,在开始语言参考中有描述很详细,然而随之而来的确是枯燥的语法描述

  • 高效测试用例组织算法pairwise之Python实现方法

    开篇: 测试过程中,对于多参数参数多值的情况进行测试用例组织,之前一直使用[正交分析法]进行用例组织,说白了就是把每个参数的所有值分别和其他参数的值做一个全量组合,用Python脚本实现,就是itertools模块中product方法(又称笛卡尔积法). 正交分析法的优点是测试用例覆盖率100%,缺点测试用例数量庞大,执行用例消耗的人工巨大. Pairwise (结对)算法源于对传统的正交分析方法优化后得到的产物,它的理论来自于数学统计.毫不避讳的说,本人看不懂数学统计中的学术论文,只能从网上找

  • Python魔法方法 容器部方法详解

    这篇文章主要介绍了Python魔法方法 容器部方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 为了加深印象,也为了以后能够更好的回忆,还是记录一下. 序列(类似集合,列表,字符串),映射(类似字典)基本上是元素的集合,要实现他们的基本行为(协议),不可变对象需要两个协议,可变对象需要4个协议. __len__(self):返回元素的数量,(为不可变对象需要的协议之一)=====> len __iter__返回一个迭代器,具有了__nex

  • 总结Java调用Python程序方法

    如何使用Java调用Python程序 本文为大家介绍如何java调用python方法,供大家参考. 实际工程项目中可能会用到Java和python两种语言结合进行,这样就会涉及到一个问题,就是怎么用Java程序来调用已经写好的python脚本呢,一共有三种方法可以实现,具体方法分别为大家介绍: 1. 在java类中直接执行python语句 此方法需要引用org.python包,需要下载Jpython.在这里先介绍一下Jpython.下面引入百科的解释: Jython是一种完整的语言,而不是一个J

  • python数组排序方法之sort、sorted和argsort详解

    目录 引言 sort和sorted的区别如下 用法实例 1.升序排序 2.降序排序 3.如果不想要排序后的值,想要排序后的索引,可以这样做 4.字符串类型排序 5.二维数组排序 6.二维数组获取排序后的索引 7.字典数组排序 8.字典数组获取排序后的索引 9.对象排序 10.对象排序获取排序后的索引 11.一维数组排序[numpy] 12.一维数组获取排序后的索引[numpy] 13.一维数组降序排序[numpy] 14.二维数组排序[numpy] 15.二维数组获取排序后的索引[numpy]

  • 31个必备的Python字符串方法总结

    目录 1.Slicing 2.strip() 3.lstrip() 4.rstrip() 5.removeprefix() 6.removesuffix() 7.replace() 8.re.sub() 9.split() 10.rsplit() 11.join() 12.upper() 13.lower() 14.capitalize() 15.islower() 16.isupper() 17.isalpha() 18.isnumeric() 19.isalnum() 20.count()

  • 解读等值线图的Python绘制方法

    目录 等值线图的Python绘制方法 python等值线图绘制,计算合适的等值线间距 总结 等值线图的Python绘制方法 等值线图或等高线图在科学界经常用到,它是由一些封闭的曲线组成的,来表示三维结构表面. 虽然看起来复杂,其实用matplotlib实现起来并不难. 代码如下: import numpy as np import matplotlib.pyplot as plt dx=0.01;dy=0.01 x=np.arange(-2.0,2.0,dx) y=np.arange(-2.0,

  • python魔法方法-自定义序列详解

    自定义序列的相关魔法方法允许我们自己创建的类拥有序列的特性,让其使用起来就像 python 的内置序列(dict,tuple,list,string等). 如果要实现这个功能,就要遵循 python 的相关的协议.所谓的协议就是一些约定内容.例如,如果要将一个类要实现迭代,就必须实现两个魔法方法:__iter__.next(python3.x中为__new__).__iter__应该返回一个对象,这个对象必须实现 next 方法,通常返回的是 self 本身.而 next 方法必须在每次调用的时

随机推荐