文档章节

numpy,pandas数据处理常见问题

易野
 易野
发布于 2017/07/19 21:24
字数 1393
阅读 83
收藏 0

pandas 实现vlooup功能 真心速度快啊 https://www.168seo.cn/python/23694.html

十分钟快速入门 Pandas https://www.168seo.cn/python/23708.html

十分钟入门Matplotlib https://www.168seo.cn/python/23712.html

这里就着重聊聊一些使用过程中常用到但教科书里找不着的问题,省的各位朋友还跑去stackoverflow找答案。

问题一、dataframe里面.values,.iloc,.ix,.loc的区别?

1.只有values是将原本dataframe数据强制转化为numpy格式的数据来索引,其他3个都是对dataframe本身的数据来索引,其中iloc是对基于values的位置来索引调用,loc是对index和columns的位置来索引,而ix则是先用loc的方式来索引,索引失败就转成iloc的方式;

 

 stackoverflow 解释https://stackoverflow.com/questions/31593201/pandas-iloc-vs-ix-vs-loc-explanation

First, a recap:

  • loc works on labels in the index.
  • iloc works on the positions in the index (so it only takes integers).
  • ix usually tries to behave like loc but falls back to behaving like iloc if the label is not in the index.

It's important to note some subtleties that can make ix slightly tricky to use:

  • if the index is of integer type, ix will only use label-based indexing and not fall back to position-based indexing. If the label is not in the index, an error is raised.

  • if the index does not contain only integers, then given an integer, ix will immediately use position-based indexing rather than label-based indexing. If however ix is given another type (e.g. a string), it can use label-based indexing.

 

 

2.iloc 索整型索引
loc 索引字符串索引
ix 是 iloc 和 loc的合体

例如:
import pandas as pd
index_loc = ['a','b']
index_iloc = [1,2]
data = [[1,2,3,4],[5,6,7,8]]

columns = ['one','two','three','four']
df1 = pd.DataFrame(data=data,index=index_loc,columns=columns)
df2 = pd.DataFrame(data=data,index=index_iloc,columns=columns)

# df1 用.loc['a']可以正确检索,但用.iloc['a']则会报错
print(df1.loc['a'])
#-------------------
one 1
two 2
three 3
four 4
Name: a, dtype: int64
#-------------------

# 相反,df2 用.iloc[10]可以正确检索,但用.loc[10]则会报错

print(df2.loc[1])
#-------------------
one 1
two 2
three 3
four 4
Name: 10, dtype: int64
#-------------------

# .ix则在两个df里都可以通用
df1.ix['a']
df2.ix[1]
可以检索字符串型索引,也可以索引整型索引。

问题二、可否有两层,或2层以上的columns或index?有的话如何索引?

可以,索引的话如果用loc或ix,则默认是用第一层的index或columns,最简单的方式是类似于这样:

example.loc[index1, columns1].loc[index2, columns2]
问题三、list, dict, numpy.ndarray, dataframe数据格式如何转换?

1. list转化为numpy.ndarray:

np.array(example)

2. numpy.ndarray转化为list:

list(example)

3. dict转化为dataframe:

example['a'] = {'bb':2, 'cc':3}
eee = pd.DataFrame(example)

4. numpy.ndarray转化为dataframe:

pd.DataFrame(example)

5. dataframe转化为numpy.ndarray:

example.values[:, :]

问题四、numpy.ndarray和dataframe如何填补nan,inf?

1. 对于numpy.ndarray来说:

example = np.where(np.isnan(example), 0, example)
example = np.where(np.isnan(example), 0, example)

2. 对于dataframe来说:

既可以用example.fillna(),还可以用example.replace(a, b)
问题五、各种OI的效率快慢问题?

1. npy读写效率最高,但最费硬盘空间,比如np.load(), np.save();

2. csv其次,比如pd.Dataframe.to_csv(),pd.load_csv();

3. txt读写,当然也可以很快,但是需要频繁的split,对格式规范的数据比较麻烦;

4. 至于简单的excel和word,可以用xlrd,xlwt来操作;
问题六、关于常见的os操作,包括新建文件夹、遍历文件夹的操作问题?
1. 新建文件夹:

if not os.path.isdir(path_out):
    os.makedirs(path_out)

2. 遍历所有文件和子文件夹:

for a, b, filenames in os.walk(path_data):
    for filename in filenames:

只遍历当前文件,不包含子文件夹:

for a, b, filenames in os.walk(path_data):
    for filename in filenames:
        if a == path_data:

问题七、numpy.ndarray和dataframe如何选取满足条件的行和列数据?

1. 根据新的columns来选取:

frame_[newcolumns]

2. 根据新的index来选取:

frame_[frame_.index.isin(newindex)]

3. 根据某一行或者列的条件来选取:

假如是根据dataframe的第一列,必须大于start_time这个常数,frame_ = frame_.ix[:, frame_.ix[0, :] >= start_date]
或者是根据dataframe的第一行,必须大于start_time这个常数,frame_ = frame_.ix[frame_.ix[:, 0] >= start_date, :]

问题八、如何计算相关性矩阵?

将y和所有x放入到sample = numpy.ndarray下,然后直接np.corrcoef(sample ),默认的是皮尔森相关系数,当然,也可以用ranked correlation,也就是spearman correlation,可以直接用scipy.stats.spearmanr。

问题九、如何取出一串字符串里面的字母或者数字?

1. 取出example里面的数字:
int(''.join(x for x in example if x.isdigit()))
2. 取出example里面的字母:
(''.join(x for x in example if x.alpha()))

问题十、各种merge操作?

1. 纵向merge 格式为numpy.ndarray的数据:
np.hstack((example1, example2))

2. 纵向merge 格式为dataframe的数据,并根据dataframe的index来merge,merge后保留原本各自列的所有index,其他没有该index的列则对应数值为nan:
pd.concat([example1, example2], axis=1)

3. 纵向merge,但是只保留公共的index行:

example.sort_index(axis=1, inplace=True)

4. 横向merge格式为numpy.ndarray的数据:
np.vstack((example1, example2))

5. 横向merge 格式为dataframe的数据,并根据dataframe的column来merge,merge后保留原本的index和columns,其他没有该index或columns的列则对应数值为np.nan:

pd.concat([example1, example2], axis=0)

6. 横向merge,但是只保留公共的columns列:

example.sort_index(axis=0, inplace=True)

问题十一、对dataframe数据的index统一加一个后缀

比如对原本dataframe下的index=[‘aa’, ‘cc’, ‘dddddd’]的,统一加上一个_5m的后缀,通常的操作大家一般就是直接example.index = [x + ‘_5m’ for x in example.index],这个其实会产生些小问题,因为默认的index是pandas.indexes.base.Index,这个格式可能会默认index里面数据的长度是确定的,导致加_5m后缀失败,所以需要先把格式强制转化为list, 像这样:example.index = [x + ‘_5m’ for x in list(example.index)]

本文转载自:http://www.jianshu.com/p/cced6617b423

易野
粉丝 5
博文 180
码字总数 131035
作品 0
深圳
私信 提问
小蛇学python(16)numpy高阶用法

如果只是从事简单的数据分析,其实numpy的用处并不是很大。简单了解一下numpy,学好pandas已经够用,尤其是对于结构化或表格化数据。但是精通面向数组的编程和思维方式是成为python科学计算牛...

跌跌撞撞小红豆
2018/07/12
0
0
一文搞定Numpy&Pandas

简单来说,Numpy就是用来进行矩阵计算的,而Pandas则基于Numpy,丰富并简化了Numpy的操作 Numpy 基础操作 基础运算 基础运算(二) 索引和迭代 合并和分割 Pandas 如果说numpy相当于一个lis...

梦中睡觉的巴子
03/29
0
0
3 个用于数据科学的顶级 Python 库

使用这些库把 Python 变成一个科学数据分析和建模工具。 Python 的许多特性,比如开发效率、代码可读性、速度等使之成为了数据科学爱好者的首选编程语言。对于想要升级应用程序功能的数据科学...

作者: Dr.michael J.garbade
2018/10/04
0
0
【机器学习】Numpy&Pandas 快速入门笔记

Numpy&Pandas 快速入门笔记 Xu An 2018-4-6 ######Numpy部分###### 1、创建array import numpy as np a=np.array([[2,23,4],[21,3,43],[34,43,234]],dtype=np.int32) #创建矩阵 使用dtype进行......

XuAn97916
2018/06/26
0
0
人工智能初学---开发工具使用

1. Anaconda Anaconda 是一个用于科学计算的Python 发行版。支持linux ,windows 系统,提供了包管理与环境管理的功能,可以很方便的解决多版本Python的并存,切换,以及各种第三方包(如 Nu...

linzihahaha
2018/11/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Angular 英雄编辑器

应用程序现在有了基本的标题。 接下来你要创建一个新的组件来显示英雄信息并且把这个组件放到应用程序的外壳里去。 创建英雄组件 使用 Angular CLI 创建一个名为 heroes 的新组件。 ng gener...

honeymoose
今天
4
0
Kernel DMA

为什么会有DMA(直接内存访问)?我们知道通常情况下,内存数据跟外设之间的通信是通过cpu来传递的。cpu运行io指令将数据从内存拷贝到外设的io端口,或者从外设的io端口拷贝到内存。由于外设...

yepanl
今天
6
0
hive

一、hive的定义: Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再在Hadoop平台上运行,达到快速开发的目的 Hive中的表是纯逻辑表,就只是表的定义,即表的元数据。本质就是Hadoop的目...

霉男纸
今天
3
0
二、Spring Cloud—Eureka(Greenwich.SR1)

注:本系列文章所用工具及版本如下:开发工具(IDEA 2018.3.5),Spring Boot(2.1.3.RELEASE),Spring Cloud(Greenwich.SR1),Maven(3.6.0),JDK(1.8) Eureka: Eureka是Netflix开发...

倪伟伟
昨天
13
0
eclipse常用插件

amaterasUML https://takezoe.github.io/amateras-update-site/ https://github.com/takezoe/amateras-modeler modelGoon https://www.cnblogs.com/aademeng/articles/6890266.html......

大头鬼_yc
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部