numpy与pandas各种功能及其对比(超全)_numpy和pandas的区别_阿丢是丢心心的博客-CSDN博客

一、简介

1、numpy的核心数据结构ndarray

支持任意维数的数组,但要求单个数组内所有数据是同质的,即类型必须相同pandas基于numpy数组构建的,它的核心数据结构seriesdataframe,仅支持一维和二维数据,但数据内部可以是异构数据,仅要求同列数据类型一致即可

numpy数据结构仅支持数字索引,而pandas数据结构则同时支持数字索引和标签索引

2、numpy用于数值计算pandas主要用于数据处理与分析。

numpy虽然也支持字符串等其他数据类型,但仍然主要是用于数值计算,尤其是内部集成了大量矩阵计算模块例如基本的矩阵运算线性代数fft生成随机数等,支持灵活的广播机制

pandas主要用于数据处理与分析,支持包括数据读写数值计算数据处理数据分析和数据可视化全套流程操作

二、基础属性

1.数据结构
在开始创建数据之前,再说明一下两种方法创建数据结构形式

numpy:是通用的同构数据多维容器,其中的所有元素必须是相同类型的

 pandas一维数据结构series多维dataframe

 其中:

Series是一种类似于一维数组对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成,索引在左边,值在右边

 DataFrame一个表格型的数据结构,既有行索引(index)也有列索引(columns),它可以被看做由Series组成的字典(共用同一个索引)。

每列可以是不同的值类型(数值字符串布尔值等)。

 2、对象常用属性

(1)ndarray

data. shape 数组的形状
data.ndim 维度的数量
data.size  数组的总大小
data.dtype 数组中的数据类型(int8, uint8, float32, complex64, bool, object, string.
data.astype 数据类型转换

(2)Series

obj.values 获取数组的值
obj.index 获取数组的索引对象
obj.name 获取数组的名称
obj.index.name 获取索引的名称

(3) DateFrame

frame.index 获取表格的行索引
frame.columns 获取表格的列索引
frame.values 获取表格中的数据
frame.col_name 获取指定列的数据
frame.index.name 获取索引的名称
frame.columns.name 获取列的名称

(由于输出比较长,部分地方就只放了代码没有运行结果哈)

三、 一维数据(numpypandas.Series对比)

1、新增Creat

#列表转化
list1 = [4, 7, -5, 3]
arr1 = np.array(list1)
s1 = pd.Series(list1)

arr1
s1 

输出array([ 4,  7, -5,  3])

0    4
1    7
2   -5
3    3
dtype: int64

 
## 直接创建
arr2 = np.array([4, 7, -5, 3]) 
obj = Series([4, 7, -5, 3], dtype=np.int32)
obj2 = Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])

arr2 
obj 
obj2

输出array([ 4,  7, -5,  3])

0    4
1    7
2   -5
3    3
dtype: int32

d    4
b    7
a   -5
c    3
dtype: int64
 #字典转换
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj3 = Series(sdata)
obj3

输出:

Ohio      35000
Texas     71000
Oregon    16000
Utah       5000
dtype: int64



states = ['California', 'Ohio', 'Oregon', 'Texas']
obj4 = Series(sdata, index=states)
obj4

输出:

California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
dtype: float64

#创建连续数值数组
arr3 = np.arange(5)
s3 = pd.Series(np.arange(5))
s3_1 = pd.Series(range(5))  #输出与s3相同
 
#创建全为0的数组
arr4 = np.zeros(5)
s4 = pd.Series(0 ,index = ['a','b','c','d'])
s4_1 = pd.Series(np.zeros(5))  
 
#创建随机数数组
arr5 = np.random.rand(5)
arr_1 = np.random.random_sample(size=5)
s5 = pd.Series(np.random.rand(5))

2、查找Read

obj2

输出:
d    4
b    7
a   -5
c    3
dtype: int64



obj2[['c', 'a', 'd']]

输出c    3
a   -5
d    4
dtype: int64


obj2[1:3]    # [1, 3)

输出:
b    7
a   -5
dtype: int64


obj2['b':'c']    # []

输出:
b    7
a   -5
c    3
dtype: int64



obj

输出:
0    4
1    7
2   -5
3    3
dtype: int32


obj[1:3]

输出:
1    7
2   -5
dtype: int32


obj.index

输出:
RangeIndex(start=0, stop=4, step=1)


obj2.index

输出:
Index(['d', 'b', 'a', 'c'], dtype='object')



obj2.values

输出:
array([ 4,  7, -5,  3])


obj[1], obj2['a']

输出:
(7, -5)

3、修改update

obj2

输出为:
d    4
b    7
a   -5
c    3
dtype: int64



obj2['d'] = 6
obj2

输出为:
d    6
b    7
a   -5
c    3
dtype: int64


obj2[['a', 'b', 'c']] = [1, 2, 3]
obj2

输出为:
d    6
b    2
a    1
c    3
dtype: int64




obj4

输出为:
California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
dtype: float64



obj4.name = 'population'
obj4.index.name = 'state'
obj4

输出为:
state
California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
Name: population, dtype: float64




obj

输出为:
0    4
1    7
2   -5
3    3
dtype: int32


obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan']
obj

输出为:
Bob      4
Steve    7
Jeff    -5
Ryan     3
dtype: int32



4、删除 Delete

obj2

输出为:
d    4
b    7
a   -5
c    3
dtype: int64


del obj2['a']

输出为:
此次无输出


obj2.drop('c')    # drop操作返回新的对象,原对象不变

输出为:
d    4
b    7
dtype: int64


obj2

输出为:
d    4
b    7
c    3
dtype: int64


obj2.drop(['b', 'd'])

输出为:
c    3
dtype: int64


obj2

输出为:
d    4
b    7
c    3
dtype: int64

5、运算

5.1、标量运算

数组与标量算术运算会将标量传播各个元素

不同大小的数组之间算术运算执行方式叫做广播broadcasting

广播中较小数组的‘广播维’必须为1, 广播会在缺失和(或)长度为1的维度上进行。较小的数组会在较大的数组上沿着该维度广播,并在经过的地方做相应的算术运算。最简单的广播就是标量值跟数组合并的运算

obj2

输出为:
d    4
b    7
a   -5
c    3
dtype: int64



obj2 * 2

输出为:
d     8
b    14
a   -10
c     6
dtype: int64



obj2 > 4

输出为:
d    False
b     True
a    False
c    False
dtype: bool



obj2 / 2

输出为:
d    2.0
b    3.5
a   -2.5
c    1.5
dtype: float64



obj2[obj2 > 4]

输出为:
b    7
dtype: int64



'b' in obj2

输出为:
True


'e' in obj2

输出为:
False

5.2、向量运算

# 根据运算的索引标签自动对齐数据,对不同索引的对象进行算术运算。
obj3

输出为:
Ohio      35000
Texas     71000
Oregon    16000
Utah       5000
dtype: int64



obj4

输出为:
state
California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
Name: population, dtype: float64



obj3 + obj4

输出为:
California         NaN
Ohio           70000.0
Oregon         32000.0
Texas         142000.0
Utah               NaN
dtype: float64



obj3 * obj4

输出为:
California             NaN
Ohio          1.225000e+09
Oregon        2.560000e+08
Texas         5.041000e+09
Utah                   NaN
dtype: float64



obj3 > obj4  # 会报错,无法匹配



ser1 = pd.Series(np.arange(1, 6), index = list('abcde'))
ser2 = pd.Series(np.arange(2, 7), index = list('abcde'))
ser1 > ser2

输出为:
a    False
b    False
c    False
d    False
e    False
dtype: bool



5.3、函数运算

(1)通用函数

通用函数(ufunc): 一种对ndarray中的数据执行元素级运算的函数。对pandas中的Series和DataFrame也适用。

一元ufunc: abs, sqrt, square, exp, log, sign, isnan, ceil, floor, rint, modf, isfinit, isinf, cos, cosh, sin, sinh, tan, tanh,….

用法:np.abs(arr)

二元ufuncadd, substract, multiply, divide, floor_divide, power, maximum, minimum, mod, copysign, greater, greater_equal, less, less_equal, equal, not_equal, logical_and, logical_or

用法:np.add(arr1, arr2) 

(2)numpy

ndarray对象的基本数学统计方法函数

sum, mean, std, var, min, max, argmin, argmax, cumsum, cumprod
 

arr = np.random.randn(3,4)
print(arr)
print(arr.mean())
print(arr.sum())
print(arr.mean(axis = 1))
print(arr.sum(axis = 0))


输出为:
[[ 0.32032819  1.26761265 -2.39961199  0.97646207]
 [-0.23177368 -0.31558693 -0.82149254 -1.63021035]
 [-0.84288386 -0.01973655 -0.96049732  1.73198541]]
-0.2437837416655606
-2.9254048999867273
[ 0.04119773 -0.74976587 -0.02278308]
[-0.75432935  0.93228917 -4.18160185  1.07823713]
(3)pandas 

pandas对象拥有的数学和统计方法:count, describe, min, max, argmin, argmax, idxmin, idxmax, quantile, sum, mean, median, mad, var, std, skew, kurt, cumsum, cummin, cummax, cumprod, diff, pct_change
 

obj2

输出为:
d    4
b    7
a   -5
c    3
dtype: int64



np.exp(obj2)

输出为:
d    403.428793
b      7.389056
c     20.085537
dtype: float64



obj4

输出为:
state
California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
Name: population, dtype: float64



pd.isnull(obj4)

输出为:
state
California     True
Ohio          False
Oregon        False
Texas         False
Name: population, dtype: bool



pd.notnull(obj4)

输出为:
state
California    False
Ohio           True
Oregon         True
Texas          True
Name: population, dtype: bool



obj4.isnull()

输出为:
state
California     True
Ohio          False
Oregon        False
Texas         False
Name: population, dtype: bool



obj4.notnull()

输出为:
state
California    False
Ohio           True
Oregon         True
Texas          True
Name: population, dtype: bool


#顺便对比一下numpy
arr = np.array([[1, 2, 3, 4, 5], [6, 4, 3, 2, 1]])
print(arr)
print(arr.argmax(axis=0))

输出为:
[[1 2 3 4 5]
 [6 4 3 2 1]]
[1 1 0 0 0]






ser = pd.Series([1,3,2,5,7])
print(ser)
print(ser.argmax)

输出为:
0    1
1    3
2    2
3    5
4    7
dtype: int64
<bound method IndexOpsMixin.argmax of 0    1
1    3
2    2
3    5
4    7
dtype: int64>

四、多维数据

1、新增Create

我们常用字典方式创建seriesdataframe

#外层字典的键作为列索引,dataframe自动加上行索引
data = {'one': [0, 1],
        'two': [2, 3]}
s3 = pd.DataFrame(data)


输出为:
   one	two
0	0	2
1	1	3

 
#对于嵌套字典,外层字典作为列索引,内层键作为行索引
data = {'one': {'a':0, 'b':1},
        'two': {'a':2, 'b':3}}
s4 = pd.DataFrame(data)

输出为:

   one	two
a	0	2
b	1	3

还可以自定义列和索引,并且依据索引对改变数据顺序

#自定义列和索引标签
s4 = pd.DataFrame(data, columns=['one', 'two', 'three', 'four'])

输出为:

    one	two	three	four
a	0	2	NaN	    NaN
b	1	3	NaN  	NaN


s5 = pd.DataFrame(data, columns=['three', 'two', 'one', 'four'])
输出为:


    three	two	one	four
a	NaN	    2	0	NaN
b	NaN	    3	1	NaN

综合上述重举例

data = {
            'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
            'year': [2000, 2001, 2002, 2001, 2002],
            'pop': [1.5, 1.7, 3.6, 2.4, 2.9]
       }
frame = DataFrame(data)
frame

输出为:

    state	year	pop
0	Ohio	2000	1.5
1	Ohio	2001	1.7
2	Ohio	2002	3.6
3	Nevada	2001	2.4
4	Nevada	2002	2.9



frame2 = DataFrame(data, columns=['year', 'state', 'pop', 'debt'], index=['one', 'two', 'three', 'four', 'five'])
frame2

输出为:

        year	state	pop	  debt
one	    2000	Ohio	1.5	  NaN
two	    2001	Ohio	1.7	  NaN
three	2002	Ohio	3.6	  NaN
four	2001	Nevada	2.4   NaN
five	2002	Nevada	2.9	  NaN


obj = Series([4, 7, -5, 3, 10], index=['d', 'b', 'a', 'c', 'e'])
obj2 = Series([8, 1, 2, -21], index=['d', 'b', 'a', 'c'])
DataFrame({'col1': obj, 'col2': obj2})

输出为:

    col1	col2
a	-5  	2.0
b	7   	1.0
c	3   	-21.0
d	4   	8.0
e	10   	NaN



frame3 = DataFrame({'year': {'one': 2000, 'two': 2001, 'three': 2002, 'four': 2001, 'five': 2002}, 
                    'state': {'one': 'Ohio', 'two': 'Ohio', 'three': 'Ohio', 'four': 'Nevada', 'five': 'Nevada'},
                    'pop': {'one': 1.5, 'two': 1.7, 'three': 3.6, 'four': 2.4, 'five': 2.9}})

输出为:


        year	state	pop
one 	2000	Ohio	1.5
two 	2001	Ohio	1.7
three	2002	Ohio	3.6
four	2001	Nevada	2.4
five	2002	Nevada	2.9































原文地址:https://blog.csdn.net/u011937496/article/details/134487410

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_43840.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注