加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

11个Python Pandas小能力让你的事变更高效(附代码实例)

发布时间:2019-05-02 02:07:58 所属栏目:建站 来源:THU数据派
导读:本文为你先容Pandas潜匿的炫酷小能力,我信托这些会对你有所辅佐。 或者本文中的某些呼吁你早已知晓,只是没意识到它尚有这种打开方法。 Pandas是一个在Python中普及应用的数据说明包。市面上有许多关于Pandas的经典教程,但本文先容几个潜匿的炫酷小能力
副问题[/!--empirenews.page--]

本文为你先容Pandas潜匿的炫酷小能力,我信托这些会对你有所辅佐。

或者本文中的某些呼吁你早已知晓,只是没意识到它尚有这种打开方法。

11个Python Pandas小能力让你的事变更高效(附代码实例)

Pandas是一个在Python中普及应用的数据说明包。市面上有许多关于Pandas的经典教程,但本文先容几个潜匿的炫酷小能力,我信托这些会对你有所辅佐。

1. read_csv

这是读取数据的入门级呼吁。当要你所读取的数据量出格大时,试着加上这个参数nrows = 5,就可以在载入所稀有据前先读取一小部门数据。云云一来,就可以停止选错脱离符这样的错误啦(数据不必然都是用逗号来脱离)。

(可能在linux体系中,你可以行使‘head’来展示恣意文本文件的前五行:head -c 5 data.txt)

接下来,用 df.columns.tolist() 可以提取每一列并转换成list。还可以加上usecols = [‘c1’, ‘c2’, … ]来载入所必要的指定列。其它,假如你知道某些列的范例,你可以加上dtype = {‘c1’: str, ‘c2’: int, …} ,这样会加速载入的速率。插手这些参数的另一大甜头是,假如这一列中同时含有字符串和数值范例,而你提前声明把这一列看作是字符串,那么这一列作为主键来融合多个表时,就不会报错了。

2. select_dtypes

假如已经在Python中完成了数据的预处理赏罚,这个呼吁可以帮你节减必然的时刻。在读取了表格之后,每一列的默认数据范例将会是bool,int64,float64,object,category,timedelta64,可能datetime64。起首你可以调查一下大抵环境,行使:

  1. df.dtypes.value_counts() 

来相识你的dataframe的每项数据范例,然后再行使:

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

获取一个仅由数值范例构成的sub-dataframe。

3. copy

假如你没传闻过它的话,我不得夸大它的重要性。输入下面的呼吁:

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

你会发明df1已经产生了改变。这是由于df2 = df1并不是天生一个df1的复成品并把它赋值给df2,而是设定一个指向df1的指针。以是只要是针对df2的改变,也会响应地浸染在df1上。为了办理这个题目,你既可以这样做:

  1. df2 = df1.copy() 

也可以这样做:

  1. from copy import deepcopy 
  2. df2 = deepcopy(df1) 

4. map

这个炫酷的呼吁让你的数据转换变得轻松。起首界说一个

dictionary,“key”是转换前的旧值,而“values”是转换后的新值。

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

几个合用景象:把True、False,转换成1、0(为了建模);界说级别;行使字典编码。

5. 用不消apply?

假如我们想在现有几列的基本上天生一个新列,并一同作为输入,那么偶然apply函数会相等有辅佐。

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

在上面的代码中,我们界说了一个有两个输入变量的函数,并依赖apply函数使其浸染到列“c1”和“c2”上。

可是apply函数在有些环境下其实是太慢了。假如你是想计较“c1”和“c2”列的最大值,你虽然可以这样去做:

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

但你会发明对比于以下呼吁,apply其实是慢太多了:

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

结论:假如你可以回收其他内置函数(他们一样平常速率更快),请不要行使apply。好比说,假如你想把“c”列的值近似取整,那么请用round(df[‘c’], 0)或df['c'],round(0)而不是上文的apply函数。

7. value counts

这个呼吁用于搜查值的漫衍。你想要搜查下“c”列中呈现的值以及每个值所呈现的频率,可以行使:

  1. df['c'].value_counts( 

下面是一些有效的小能力/参数:

  • normalize = True:查察每个值呈现的频率而不是频次数。
  • dropna = False: 把缺失值也保存在这次统计中。
  • sort = False: 将数据凭证值来排序而不是凭证呈现次数排序。
  • df[‘c].value_counts().reset_index(): 将这个统计表转换成pandas的dataframe而且举办处理赏罚。

8. 缺失值的数目

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读