当前位置:首页 > 编程教程 > Python技术文章 > numpy和pandas中数组的合并、拉直和重塑实例

python numpy和pandas中数组的合并、拉直和重塑代码分享

  • 发布时间:
  • 作者:码农之家
  • 点击:189

这篇文章主要知识点是关于python、numpy、pandas、数组合并、数组拉直、数组重塑、python之Numpy和Pandas的使用介绍 的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

Python数据科学指南
  • 类型:Python数据分析大小:62.3 MB格式:PDF作者:Gopi
立即下载

numpy和pandas中数组的合并、拉直和重塑实例

合并

在numpy中合并两个array

numpy中可以通过concatenate,参数axis=0表示在垂直方向上合并两个数组,等价于np.vstack;参数axis=1表示在水平方向上合并两个数组,等价于np.hstack。

垂直方向:

np.concatenate([arr1,arr2],axis=0)
np.vstack([arr1,arr2])

水平方向:

np.concatenate([arr1,arr2],axis=1)
np.hstack([arr1,arr2])
import numpy as np
import pandas as pd

arr1=np.ones((3,5))
arr1
Out[5]: 
array([[ 1., 1., 1., 1., 1.],
    [ 1., 1., 1., 1., 1.],
    [ 1., 1., 1., 1., 1.]])
    
arr2=np.random.randn(15).reshape(arr1.shape)
arr2
Out[8]: 
array([[-0.09666833, 1.47064828, -1.94608976, 0.2651279 , -0.32894787],
    [ 1.01187699, 0.39171167, 1.49607091, 0.79216196, 0.33246644],
    [ 1.71266238, 0.86650837, 0.77830394, -0.90519422, 1.55410056]])
    
np.concatenate([arr1,arr2],axis=0) #在纵轴上合并
Out[9]: 
array([[ 1.    , 1.    , 1.    , 1.    , 1.    ],
    [ 1.    , 1.    , 1.    , 1.    , 1.    ],
    [ 1.    , 1.    , 1.    , 1.    , 1.    ],
    [-0.09666833, 1.47064828, -1.94608976, 0.2651279 , -0.32894787],
    [ 1.01187699, 0.39171167, 1.49607091, 0.79216196, 0.33246644],
    [ 1.71266238, 0.86650837, 0.77830394, -0.90519422, 1.55410056]])

np.concatenate([arr1,arr2],axis=1) #在横轴上合并
Out[10]: 
array([[ 1.    , 1.    , 1.    , ..., -1.94608976,
     0.2651279 , -0.32894787],
    [ 1.    , 1.    , 1.    , ..., 1.49607091,
     0.79216196, 0.33246644],
    [ 1.    , 1.    , 1.    , ..., 0.77830394,
    -0.90519422, 1.55410056]])
    
   
    

在pandas中合并两个DataFrame

pandas中通过concat方法实现合并,指定参数axis=0 或者 axis=1,在纵轴和横轴上合并两个数组。与numpy不同,这里的两个dataframe要放在一个列表中,即[frame1,frame2]

from pandas import DataFrame

frame1=DataFrame([[1,2,3],[4,5,6]])
frame2=DataFrame([[7,8,9],[10,11,12]])

pd.concat([frame1,frame2], ignore_index=True) # 合并的数组是一个可迭代的列表。
Out[25]: 
  0  1  2
0  1  2  3
1  4  5  6
0  7  8  9
1 10 11 12


pd.concat([frame1,frame2], axis=1, ignore_index=True)
Out[27]: 
  0 1 2  3  4  5
0 1 2 3  7  8  9
1 4 5 6 10 11 12

拉直和重塑

拉直即把一个二维的array变成一个一维的array。默认情况下,Numpy数组是按行优先顺序创建。在空间方面,这就意味着,对于一个二维数字,每行中的数据项是存放在内在中相邻的位置上的。另一种顺序是列优先。

由于历史原因,行优先和列优先又分别被称为C和Fortran顺序。在Numpy中,可以通过关键字参数order=‘C' 和order=‘F' 来实现行优先和列优先。

拉直:

arr=np.arange(15).reshape(3,-1)
arr
Out[29]: 
array([[ 0, 1, 2, 3, 4],
    [ 5, 6, 7, 8, 9],
    [10, 11, 12, 13, 14]])
    
arr.ravel('F') #按照列优先,扁平化。
Out[30]: array([ 0, 5, 10, ..., 4, 9, 14])

arr.ravel('C') # 默认顺序。#按照行优先,扁平化。
Out[31]: array([ 0, 1, 2, ..., 12, 13, 14])

重塑:

Fortran顺序重塑后按列拉直和原数据按列拉直一样。

arr.reshape((5,3),order='F') 
Out[32]: 
array([[ 0, 11, 8],
    [ 5, 2, 13],
    [10, 7, 4],
    [ 1, 12, 9],
    [ 6, 3, 14]])

C顺序重塑后按行拉直和原数据按行拉直一样。

 arr.reshape((5,3),order='C')
 Out[33]: 
array([[ 0, 1, 2],
    [ 3, 4, 5],
    [ 6, 7, 8],
    [ 9, 10, 11],
    [12, 13, 14]])

以上这篇numpy和pandas中数组的合并、拉直和重塑实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。

python之Numpy和Pandas的使用介绍

最近要对一系列数据做同比比较,需要用到numpy和pandas来计算,下面这篇文章主要给大家介绍了关于python学习教程之Numpy和Pandas使用的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴。

前言

本文主要给大家介绍了关于python中Numpy和Pandas使用的相关资料,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

它们是什么?

NumPy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

Pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

List、Numpy与Pandas

Numpy与List

相同之处:

  • 都可以用下标访问元素,例如a[0]

  • 都可以切片访问,例如a[1:3]

  • 都可以使用for循环进行遍历

不同之处:

  • Numpy之中每个元素类型必须相同;而List中可以混合多个类型元素

  • Numpy使用更方便,封装了许多函数,例如mean、std、sum、min、max等

  • Numpy可以是多维数组

  • Numpy用C实现,操作起来速度更快

Pandas与Numpy

相同之处:

  • 访问元素一样,可以使用下标,也可以使用切片访问

  • 可以使用For循环遍历

  • 有很多方便的函数,例如mean、std、sum、min、max等

  • 可以进行向量运算

  • 用C实现,速度更快

不同之处:Pandas拥有Numpy一些没有的方法,例如describe函数。其主要区别是:Numpy就像增强版的List,而Pandas就像列表和字典的合集,Pandas有索引。

Numpy使用

1、基本操作


import numpy as np
#创建Numpy
p1 = np.array([1, 2, 3])
print p1
print p1.dtype


[1 2 3]
int64


#求平均值
print p1.mean()


2.0


#求标准差
print p1.std()


0.816496580928


#求和、求最大值、求最小值
print p1.sum()
print p1.max()
print p1.min()


6
3
1


#求最大值所在位置
print p1.argmax()


2

2、向量运算


p1 = np.array([1, 2, 3])
p2 = np.array([2, 5, 7])


#向量相加,各个元素相加
print p1 + p2


[ 3 7 10]


#向量乘以1个常数
print p1 * 2


[2 4 6]


#向量相减
print p1 - p2


[-1 -3 -4]


#向量相乘,各个元素之间做运算
print p1 * p2


[ 2 10 21]


#向量与一个常数比较
print p1 > 2


[False False True]

3、索引数组

首先,看下面一幅图,理解下

python之Numpy和Pandas的使用介绍

然后,咱们用代码实现看下


a = np.array([1, 2, 3, 4, 5])
print a


[1 2 3 4 5]


b = a > 2
print b


[False False True True True]


print a[b]


[3 4 5]

a[b]中,只会保留a中所对应的b位置为True的元素

4、原地与非原地

咱们先来看一组运算:


a = np.array([1, 2, 3, 4])
b = a
a += np.array([1, 1, 1, 1])
print b


[2 3 4 5]


a = np.array([1, 2, 3, 4])
b = a
a = a + np.array([1, 1, 1, 1])
print b


[1 2 3 4]

从上面结果可以看出来,+=改变了原来数组,而+没有。这是因为:

  • +=:它是原地计算,不会创建一个新的数组,在原始数组中更改元素

  • +:它是非原地计算,会创建一个新的数组,不会修改原始数组中的元素

5、Numpy中的切片与List的切片


l1 = [1, 2, 3, 5]
l2 = l1[0:2]
l2[0] = 5
print l2
print l1


[5, 2]
[1, 2, 3, 5]


p1 = np.array([1, 2, 3, 5])
p2 = p1[0:2]
p2[0] = 5
print p1
print p2


[5 2 3 5]
[5 2]

从上可知,List中改变切片中的元素,不会影响原来的数组;而Numpy改变切片中的元素,原来的数组也跟着变了。这是因为:Numpy的切片编程不会创建一个新数组出来,当修改对应的切片也会更改原始的数组数据。这样的机制,可以让Numpy比原生数组操作更快,但编程时需要注意。

6、二维数组的操作


p1 = np.array([[1, 2, 3], [7, 8, 9], [2, 4, 5]])
#获取其中一维数组
print p1[0]


[1 2 3]


#获取其中一个元素,注意它可以是p1[0, 1],也可以p1[0][1]
print p1[0, 1]
print p1[0][1]


2
2


#求和是求所有元素的和
print p1.sum()


41
[10 14 17]

但,当设置axis参数时,当设置为0时,是计算每一列的结果,然后返回一个一维数组;若是设置为1时,则是计算每一行的结果,然后返回一维数组。对于二维数组,Numpy中很多函数都可以设置axis参数。


#获取每一列的结果
print p1.sum(axis=0)


[10 14 17]


#获取每一行的结果
print p1.sum(axis=1)


[ 6 24 11]


#mean函数也可以设置axis
print p1.mean(axis=0)


[ 3.33333333 4.66666667 5.66666667]

Pandas使用

Pandas有两种结构,分别是Series和DataFrame。其中Series拥有Numpy的所有功能,可以认为是简单的一维数组;而DataFrame是将多个Series按列合并而成的二维数据结构,每一列单独取出来是一个Series。

咱们主要梳理下Numpy没有的功能:

1、简单基本使用


import pandas as pd
pd1 = pd.Series([1, 2, 3])
print pd1


0 1
1 2
2 3
dtype: int64


#也可以求和和标准偏差
print pd1.sum()
print pd1.std()


6
1.0

2、索引

(1)Series中的索引


p1 = pd.Series(
 [1, 2, 3],
 index = ['a', 'b', 'c']
)
print p1


a 1
b 2
c 3
dtype: int64


print p1['a']

(2)DataFrame数组


p1 = pd.DataFrame({
 'name': ['Jack', 'Lucy', 'Coke'],
 'age': [18, 19, 21]
})
print p1


 age name
0 18 Jack
1 19 Lucy
2 21 Coke


#获取name一列
print p1['name']


0 Jack
1 Lucy
2 Coke
Name: name, dtype: object


#获取姓名的第一个
print p1['name'][0]


Jack


#使用p1[0]不能获取第一行,但是可以使用iloc
print p1.iloc[0]


age 18
name Jack
Name: 0, dtype: object

总结:

  • 获取一列使用p1[‘name']这种索引

  • 获取一行使用p1.iloc[0]

3、apply使用

apply可以操作Pandas里面的元素,当库里面没用对应的方法时,可以通过apply来进行封装


def func(value):
 return value * 3
pd1 = pd.Series([1, 2, 5])


print pd1.apply(func)


0  3
1  6
2 15
dtype: int64

同样可以在DataFrame上使用:


pd2 = pd.DataFrame({
 'name': ['Jack', 'Lucy', 'Coke'],
 'age': [18, 19, 21]
})
print pd2.apply(func)


 age   name
0 54 JackJackJack
1 57 LucyLucyLucy
2 63 CokeCokeCoke

4、axis参数

Pandas设置axis时,与Numpy有点区别:

  • 当设置axis为'columns'时,是计算每一行的值

  • 当设置axis为'index'时,是计算每一列的值


pd2 = pd.DataFrame({
 'weight': [120, 130, 150],
 'age': [18, 19, 21]
})


0 138
1 149
2 171
dtype: int64


#计算每一行的值
print pd2.sum(axis='columns')


0 138
1 149
2 171
dtype: int64


#计算每一列的值
print pd2.sum(axis='index')


age  58
weight 400
dtype: int64

5、分组


pd2 = pd.DataFrame({
 'name': ['Jack', 'Lucy', 'Coke', 'Pol', 'Tude'],
 'age': [18, 19, 21, 21, 19]
})
#以年龄分组
print pd2.groupby('age').groups


{18: Int64Index([0], dtype='int64'), 19: Int64Index([1, 4], dtype='int64'), 21: Int64Index([2, 3], dtype='int64')}

6、向量运算

需要注意的是,索引数组相加时,对应的索引相加


pd1 = pd.Series(
 [1, 2, 3],
 index = ['a', 'b', 'c']
)
pd2 = pd.Series(
 [1, 2, 3],
 index = ['a', 'c', 'd']
)


print pd1 + pd2


a 2.0
b NaN
c 5.0
d NaN
dtype: float64

出现了NAN值,如果我们期望NAN不出现,如何处理?使用add函数,并设置fill_value参数


print pd1.add(pd2, fill_value=0)


a 2.0
b 2.0
c 5.0
d 3.0
dtype: float64

同样,它可以应用在Pandas的dataFrame中,只是需要注意列与行都要对应起来。

总结

这一周学习了优达学城上分析基础的课程,使用的是Numpy与Pandas。对于Numpy,以前在Tensorflow中用过,但是很不明白,这次学习之后,才知道那么简单,算是有一定的收获。

以上就是python之Numpy和Pandas的使用介绍的详细内容,更多请关注码农之家其它相关文章!

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

python数组操作 相关电子书
学习笔记
网友NO.792691

python安装numpy和pandas的方法步骤

最近要对一系列数据做同比比较,需要用到numpy和pandas来计算,不过使用python安装numpy和pandas因为linux环境没有外网遇到了很多问题就记下来了。首要条件,python版本必须是2.7以上。 linux首先安装依赖包 yum -y install blas blas-devel lapack-devel lapackyum -y install seaborn scipyyum -y install freetype freetype-devel libpng libpng-develyum -y install python-pipyum -y install pytzyum -y install python-dateutil windows安装pip即可,具体方法参考pip官网 http://pip-cn.readthedocs.io/en/latest/installing.html 1、 pip方式安装 如果有外网一般推荐使用pip安装,linux下和windows下均可使用pip安装 python -m pip install --upgrade pippip install --user numpy scipy matplotlib jupyter pandas sympy nose 但很快就会发现这些源安装超级慢,所以我推荐大家使用豆瓣的源 pip install matplotlib -i http://pypi.douban.com/simple --trusted-host pypi.douban.compip install numpy -i http://py……

网友NO.761434

python中Numpy和Pandas模块的详细介绍(附示例)

本篇文章给大家带来的内容是关于python中Numpy和Pandas模块的详细介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 本章学习两个科学运算当中最为重要的两个模块,一个是 numpy ,一个是 pandas 。任何关于数据分析的模块都少不了它们两个。 一、numpy pandas特点 NumPy(Numeric Python) 系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。据说NumPy将Python相当于变成一种免费的更强大的MatLab系统。 numpy特性:开源,数据计算扩展,ndarray, 具有多维操作, 数矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。 pandas :为了解决数据分析而创建的库。 特点: 运算速度快:numpy 和……

网友NO.360201

python学习教程之Numpy和Pandas的使用

前言 本文主要给大家介绍了关于python中Numpy和Pandas使用的相关资料,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 它们是什么? NumPy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。 Pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。 List、Numpy与Pandas Numpy与List 相同之处: 都可以用下标访问元素,例如a[0] 都可以切片访问,例如a[1:3] 都可以使用for循环进行遍历 不同之处: Numpy之中每个元素类型必须相同;而List中可以混合多个类型元素 Numpy使用更方便,封装了许多函数,例如mean、std、sum、……

<
1
>

Copyright 2018-2020 www.xz577.com 码农之家

投诉 / 推广 / 赞助:QQ:520161757