12_3numpy的索引以及pandas的两个数据结构。

一。索引与切片。

  nump的索引和python中的索引差不多,都是左开右闭区间。

  如一个普通的array的索引,是由0开始的:

res = np.array([1,2,3,4,5]) #### nparray索引是从0开始
res[1]
2

  一个二维数组的索引有两种

res = np.array([[1,2,3,5],[6,7,8,9]])
res[1,1]
7

  或者(推荐):

res[1][1]
7

  切片

  一维数组的切片:

res = np.array([1,2,3,4,5])
res[1:4]
array([2, 3, 4])

  二维数组的切片

res = np.array([[1,2,3,4],[5,6,7,8], [9,10,11,12]])
res[1:3, 1:3]
array([[ 6,  7],
       [10, 11]])

  布尔索引

  首先生成一个随机数组:

import random
li = [random.randint(1,10) for _ in range(20)]
res = np.array(li)

  如果需要选出数组中大于5的数,一般需要遍历数组,但是使用布尔型索引就很方便。

  首先将其大于5的部分变成布尔型:

res > 5
array([False,  True,  True,  True, False, False, False, False,  True,
       False,  True, False,  True,  True,  True, False, False,  True,
       False,  True])

  再直接将其作为索引条件方如该索引中:

res[res>5]
array([ 8,  6,  8,  9,  9,  8,  7, 10,  9,  9])

  二维数组也可以这样操作:

res = np.array([[1,2,3,4], [5,6,7,8]])
res[res > 5]
array([6, 7, 8])

  花式索引:

  可以将需要索引的值的下标放入列表中 ,将列表作为索引值,取出对应下标的值:

res = np.array([1,2,3,4,5,6,7,8,9,10])
res[[1,3,6,8]]
array([2, 4, 7, 9])

  reshape

  将一个数组的形状改变,改成二维或者一维,但是所有的值加起来不能变:

s = res.reshape(2,5)
s.reshape(10)
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

二。通用函数

  1.abs 求绝对值

np.abs(-2)  ### 求绝对值
2

  绝对值可以是数组:

np.abs([-2,-4,-5,-10])
array([ 2,  4,  5, 10])

  2.fabs 浮点数绝对值。

  用来计算浮点数的绝对值:

np.fabs([-1.3,-2.5,-3.4])
array([1.3, 2.5, 3.4])

  3.sqrt 求平方根

np.sqrt(4)
2.0
np.sqrt(2)
1.4142135623730951:

  4.square 求平方

np.square(2)  ### 求平方
4

  5.exp 求e**x

np.exp(2) 
7.38905609893065

  6.log 求log

np.log(2)
0.6931471805599453

  7.ceil()向上取整

np.ceil(5.4)  #### 向上取整
6.0

  8.floor 向下取整

np.floor(4.6)
4.0

  9.rint 四舍五入:

np.rint(3.5)
4.0
np.rint(3.2)
3.0

  10.modf 将其整数与小数分离:

np.modf([1.2,3.5,4.7])
(array([0.2, 0.5, 0.7]), array([1., 3., 4.]))

  11.nan  

  nan是一个特殊的数字,它的数据类型位float,是用来替换数据中什么都没有的数据。

  它连它自己也不等于:

np.nan
nan
np.nan == np.nan
False

  当判断是否是nan的时候可以使用isnan进行判断:

np.isnan(np.nan)
True

  12.sum 求一个数组的和

np.sum([1,2,3,4,5])
15

  13.cumsum 求该列表之前的所有数的和:
  14.var方差和std平均差

li = [1,2,3,4,5]
### 方差: ((1-平均数)**2 + (2-平均数)**2 + ....) / 5
### 标准差: 方差开根号

  15.max 最大值  argmax最大索引值

np.max(res)
5
np.argmax(res)
4

  

函数功能 
sum 求和  
cumsum 求前缀和  
mean 求平均数  
std 求标准差  
var 求方差  
min 求最小值  
max 求最大值  
argmin 求最小值索引  
argmax 求最大值索引

三。随机数

  1.rand  生成一个0-1之间的随机数

np.random.rand()  ### 生成一个0-1之间的随机数
0.9407811145107979

  2.randint生成这个区间里的一个数

np.random.randint(1,10)
4

  3.choice  从前面的数中选几个数

np.random.choice(12,5)
array([8, 0, 1, 4, 9])

  4,uniform 给定形状正太分步,可以给二维数组

np.random.uniform(0,10,[10,10])  #### 正态分布
array([[5.55467182, 1.74301923, 4.2272649 , 9.71388574, 6.62650629,
        0.84804251, 6.97707852, 1.32037512, 8.87127644, 4.81503186],
       [7.32022186, 2.88828494, 9.89366413, 8.16468677, 8.48887315,。。。。。

 四。pandas中值series

  pandas 是一个强大的python数据分析包,它是基于numpy构建的。

  安装方法:

pip install pandas

  引用方法:

import pandas as pd

  series

  series是一种类似于以为数组的对象,它可以是一个有序的字典。

  1.不给索引创建,会自动创建索引。

s1 = pd.Series([1,2,3,4])
0    1
1    2
2    3
3    4
dtype: int64

  对其索引也是使用该索引:

s1[1]
2

  2.指定索引创建:

s2 = pd.Series([1,2,3,4], index=['a', 'b', 'c', 'd'])
a    1
b    2
c    3
d    4
dtype: int64

  索引:

s2['b']
2

  可以使用字典的方式创建:

pd.Series({"a":1, "b":2})
a    1
b    2
dtype: int64

  缺失数据处理

  当使用字典发输入数据的时候,可以给定索引,索引必须与字典的key值对应否则该数据就是nan型:

st = {"sean":18,"yang":19,"bella":20,"cloud":21}
obj = pd.Series(st)
obj
sean     18
yang     19
bella    20
cloud    21
dtype: int64

  缺失数据:

st = {"sean":18,"yang":19,"bella":20,"cloud":21}
s3 = pd.Series(st, index={'sean','yang','cloud','rocky'})
s3
yang     19.0
rocky     NaN
cloud    21.0
sean     18.0
dtype: float64

  要想过滤这个数据,有两种方法:

  1.dropna

s3.dropna(inplace=True)
sean     18.0
yang     19.0
cloud    21.0
dtype: float64

  这个函数会将这数据中的所有nan过滤排除,

  如果其中的参数inplace为true,则原来数据中的nan也会被排除。

  2.fillna

  fillna会将该数字替换成指定的数,并且也有inplace参数

#### fillna
s3.fillna(0, inplace=True)
sean     18.0
rocky     0.0
yang     19.0
cloud    21.0
dtype: float64

  数据的计算

  支持标量:

s3 * 2
yang     38.0
rocky     0.0
cloud    42.0
sean     36.0
dtype: float64

  支持相加:

s3 + s4
yang     38.0
rocky    20.0
cloud    42.0
sean     36.0
dtype: float64

  支持布尔型索引

s3[s3>0]

  支持字典索引:

s3['rocky']
0.0

  iloc

  iloc索引的是该数字的位置下表

s3.iloc[1]  ##### iloc : 索引位置下标
0.0

  loc索引的是index:

s3.loc['rocky']
0.0

  数据对对齐

  当两个数字进行相加的时候,会自动根据索引进行相加,

sr1 = pd.Series([12,23,34], index=['c','a','d'])
sr2 = pd.Series([11,20,10], index=['d','c','a',])
sr1+sr2
a    33
c    32
d    45
dtype: int64

  如果相加的时候有以方没有该索引,就会是nan

复制代码
sr3
d    11
c    20
a    10
b    14
dtype: int64
sr1 + sr3
a    33.0
b     NaN
c    32.0
d    45.0
dtype: float64
复制代码

四。pandas中的datafarme

  创建dataframe

  创建dataframe使用字典+列表的方式:

df = pd.DataFrame( {'one':[1,2,3,4],'two':[4,3,2,1]} )
    one    two
0    1    4
1    2    3
2    3    2
3    4    1

  创建之后会自动补上索引。

  使用columns可以选择字典中的kv进行显示:

data = pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})
pd.DataFrame(data,columns=['two','one'])
    two    one
0    4    1
1    3    2
2    2    3
3    1    4

  索引:

  将这个头部+索引的方式定位元素:

df['one'][0]
1

  使用index可以查看该data的索引和步长:

df.index
RangeIndex(start=0, stop=4, step=1)

  使用columns查看其行标:

df.columns
Index(['one', 'two'], dtype='object')

  使用values可以查看其值:

df.values
array([[1, 4],
       [2, 3],
       [3, 2],
       [4, 1]], dtype=int64)

  describe()  查看dataframe的明细:

复制代码
df.describe()

      one      two
count    4.000000    4.000000
mean    2.500000    2.500000
std    1.290994    1.290994
min    1.000000    1.000000
25%    1.750000    1.750000
50%    2.500000    2.500000
75%    3.250000    3.250000
max    4.000000    4.000000
复制代码

五。获取数据的方式:

  在真实的数据分析中,常用的数据都是通过外部导入。

  1.导入csv格式的数据:

df = pd.read_csv('./douban_movie.csv')
df
    名字    投票人数    类型    产地    上映时间    时长    年代    评分    首映地点
0    肖申克的救赎    692795.0    剧情/犯罪    美国    1994-09-10 00:00:00    142.0    1994    9.6    多伦多电影节
1    控方证人    42995.0    剧情/悬疑/犯罪    美国    1957-12-17 00:00:00    116.0    1957    9.5    美国
2    美丽人生    327855.0    剧情/喜剧/爱情    意大利    1997-12-20 00:00:00    116.0    1997    9.5    意大利
3    阿甘正传    580897.0    剧情/爱情    美国    1994-06-23 00:00:00    142.0    1994    9.4    洛杉矶首映
。。。。

  head() tail()

  可以查看数据的开头部分和结尾部分。

  读取的数据可以通过to_csv保存到csv格式:

df.to_csv('./a.csv', index=False)

  加上index就可以避免重复的index

 

posted on   一只萌萌哒的提莫  阅读(302)  评论(0编辑  收藏  举报
编辑推荐:
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
阅读排行:
· 为DeepSeek添加本地知识库
· 精选4款基于.NET开源、功能强大的通讯调试工具
· DeepSeek智能编程
· 大模型工具KTransformer的安装
· [计算机/硬件/GPU] 显卡
点击右上角即可分享
微信分享提示