pandas基础01

一、python基础

1、列表推导式与条件赋值



L=[]
def my_func(x):
    return 2*x
for i in range(10):
    L.append(my_func(i))
​
L
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

[my_func(i) for i in range(10)]#列表推导式
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
列表推导式多层嵌套
[m+n for m in [1,2,3] for n in [4,5,6]]#列表推导式多层嵌套
[5, 6, 7, 6, 7, 8, 7, 8, 9]
条件赋值
v='I love you' if 5>6 else 'I hate you'#条件赋值
v
'I hate you'
a,b=3,4
condition=a>b
if condition:
    v=a
else:
    v=b
​
l=[1,2,3,4,5,6,7,8,9]
[i if i<5 else 5 for i in l]
[1, 2, 3, 4, 5, 5, 5, 5, 5]

2、匿名函数与MAP方法

my_func=lambda x:x**2#匿名函数
my_func(3)
9
multi_para_func=lambda a,b:a+b
multi_para_func(3,4)
7
[(lambda x: x*2)(i) for i in range(10)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
list(map(lambda x:2*x,range(10)))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
list(map(lambda a,b:a+b,range(5),[6,7,8,9,10]))
[6, 8, 10, 12, 14]
my_func=lambda x:x**2#匿名函数
my_func(3)
9
multi_para_func=lambda a,b:a+b
multi_para_func(3,4)
7
[(lambda x: x*2)(i) for i in range(10)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
list(map(lambda x:2*x,range(10)))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
list(map(lambda a,b:a+b,range(5),[6,7,8,9,10]))
[6, 8, 10, 12, 14]

3、zip对象与enumrate方法

l1=list('abc')
print(l1)
for index,value in enumerate(l1):
    print(index,value)

['a', 'b', 'c']
0 a
1 b
2 c
l1=list('abc')
for index,value in zip(range(len(l1)),l1):
    print(index,value)

0 a
1 b
2 c
l1=list('abc')
l2=[1,2,3]
D=dict(zip(l1,l2))
print(D)

{'a': 1, 'b': 2, 'c': 3}

解压:

l1=list('abc')
l2=[1,2,3]
l3=list('xyz')
Z=list(zip(l1,l2,l3))
print(Z)
z=list(zip(*Z))#解压
print(z)

[('a', 1, 'x'), ('b', 2, 'y'), ('c', 3, 'z')]
[('a', 'b', 'c'), (1, 2, 3), ('x', 'y', 'z')]

二、numpy基础

1、np数组的构造:

import numpy as np

a1=np.array([1,2,3])
print(a1)

[1 2 3]

等差数列:

a2=np.linspace(1,10,8)#从1到10,等差取8个数
print(a2)

[ 1.          2.28571429  3.57142857  4.85714286  6.14285714  7.42857143
  8.71428571 10.        ]
a3=np.arange(1,10,2)#从1到10,以2为步长的等差数列
print(a3)

[1 3 5 7 9]

zeros,eye,full矩阵:

a4=np.zeros((3,3))#3*3的矩阵
print(a4)

a5=np.eye(5)#5*5的单位矩阵
print(a5)

a6=np.eye(5,k=1)#偏移主对角线1个单位的伪单位矩阵
print(a6)

a7=np.full((4,5),2)#创建4*5的矩阵,填充2
print(a7)

a8=np.full((4,5),[1,2,3,4,5])#列表填充每一列的值
print(a8)

[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]
 
[[1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]]
 
[[0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]
 [0. 0. 0. 0. 0.]]
 
[[2 2 2 2 2]
 [2 2 2 2 2]
 [2 2 2 2 2]
 [2 2 2 2 2]]
 
[[1 2 3 4 5]
 [1 2 3 4 5]
 [1 2 3 4 5]
 [1 2 3 4 5]]

随机数生成:

r1=np.random.rand(3)#生成3个随机数,0-1均匀分布
print(r1)

r2=np.random.rand(3,3)#生成3*3的矩阵,0-1均匀分布
print(r2)

a,b=10,20
r_a_b=(b-a)*np.random.rand(10)+a#生成10个[a,b]的随机数
print(r_a_b)

[0.64567505 0.70645119 0.94425219]

[[0.15387242 0.20973148 0.67030315]
 [0.61440422 0.29854377 0.88316471]
 [0.58581027 0.23526848 0.41332771]]
 
[16.17190947 11.21557427 10.12546842 13.89429609 15.92681769 14.74233328 10.98869316 12.86417526 12.18595352 17.14021395]

randn:

r1=np.random.randn(5)#生成5个0-1分布的随机数
print(r1)

r2=np.random.randn(2,3)#生成2*3的矩阵的标准正态分布的随机数
print(r2)

sigma,mu=2,3
n1=mu+np.random.randn(3)*sigma
print(n1)

[-0.45466238  0.47113798  1.12117916  0.32488041  0.23918829]
[[ 0.30322665  1.71965957  0.60957456]
 [-1.04228866 -1.04621328  0.1132734 ]]
[2.90320904 1.0696739  2.01430317]

randint:

l,h,s=10,20,(3,4)
a3=np.random.randint(l,h,s)#最小值,最大值,维度
print(a3)

[[19 14 16 12]
 [10 13 17 14]
 [15 17 19 15]]

choice:

a4=np.random.choice([1,2,3,4],(2,3),replace=True,p=[0.7,0.1,0.1,0.1])
print(a4)

a4=np.random.choice([1,2,3,4,5,6,7,8],(2,3),replace=False)
print(a4)

[[1 1 1]
 [1 1 2]]
[[7 5 1]
 [2 4 8]]

permutation:
打散数据

a5=[1,2,3,4,5]
a6=np.random.permutation(a5)
print(a6)

[5 1 4 3 2]

随机种子:固定随机数

np.random.seed(10)

a7=np.random.rand(10)
print(a7)

[0.77132064 0.02075195 0.63364823 0.74880388 0.49850701 0.22479665
 0.19806286 0.76053071 0.16911084 0.08833981]

如果没有固定随机数,每一次运行的结果都会不一样。

2、数组的合并与变形
转置:

n1=np.random.rand(3,4)
print(n1.T)

[[0.50902337 0.89446865 0.26779241]
 [0.24319435 0.97336943 0.59433837]
 [0.61993015 0.333194   0.86417938]
 [0.87975344 0.08898697 0.40642231]]

合并:

r_:(上下合并)
c_:(左右合并)

n1=np.random.rand(3,4)

print(np.r_[n1,n1])
print(np.c_[n1,n1])

[[0.08162041 0.10784975 0.206065   0.67891978]
 [0.27575327 0.27232511 0.02302929 0.34596961]
 [0.3797719  0.08531164 0.55571834 0.71515822]
 [0.08162041 0.10784975 0.206065   0.67891978]
 [0.27575327 0.27232511 0.02302929 0.34596961]
 [0.3797719  0.08531164 0.55571834 0.71515822]]
[[0.08162041 0.10784975 0.206065   0.67891978 0.08162041 0.10784975
  0.206065   0.67891978]
 [0.27575327 0.27232511 0.02302929 0.34596961 0.27575327 0.27232511
  0.02302929 0.34596961]
 [0.3797719  0.08531164 0.55571834 0.71515822 0.3797719  0.08531164
  0.55571834 0.71515822]]

不同维度的合并:
行列数要保持一致

a1=[1,2,3]
a2=[[3,4],[5,6],[7,8]]
print(np.c_[a1,a2])
print(np.r_[np.array([0,0]),np.zeros(2)])

[[1 3 4]
 [2 5 6]
 [3 7 8]]
 
 [0. 0. 0. 0.]

维度转换:reshape

a=np.array([1,2,3,4,5,6])
print(a)
b=a.reshape(2,3)
print(b)
c=b.reshape((3,2),order='F')#order='C'按行读取并填充,'F'为按列读取并填充
print(c)

[1 2 3 4 5 6]

[[1 2 3]
 [4 5 6]]
 
[[1 5]
 [4 3]
 [2 6]]

维度转换时,可以有一个维度空缺。

a=np.array([1,2,3,4,5,6])
b=a.reshape((2,-1))
c=a.reshape((-1,2))
print(b)
print(c)

[[1 2 3]
 [4 5 6]]
 
[[1 2]
 [3 4]
 [5 6]]

将一列转换为一行:

a=np.full((3,1),2)
print(a)

b=a.reshape(-1)
print(b)


[[2]
 [2]
 [2]]
 
[2 2 2]

3、np数组的切片与索引
切片:

a=np.arange(10)
print(a[2:5])
b=a.reshape(2,5)
print(b)
print(b[:,[1,2]])


[2 3 4]

[[0 1 2 3 4]
 [5 6 7 8 9]]
 
[[1 2]
 [6 7]]

对以为数组取布尔值:

a=np.arange(10)
print(a[a%3==1])

a=np.arange(10)
print(a[a%3==1])

4、常用函数

where:

a=np.array([1,2,3,4,5,6])
b=np.where(a%2==1,1,0)
print(b)

[1 0 1 0 1 0]

where方法类似与Excel中的if函数。

nonzero,argmax,argmin,返回数据索引

a=np.array([1,2,3,4,5,6,0,-1,-2,-3,-4,-5,-6])
b=np.nonzero(a)
c=np.argmax(a)
d=np.argmin(a)
print(b)
print(c)
print(d)

(array([ 0,  1,  2,  3,  4,  5,  7,  8,  9, 10, 11, 12]),)
5
12

any:至少一个0,返回True,否则False
all:全部非0,返回True,否则False

a = np.array([1, 2, 3, 4, 5, 6, 0, -1, -2, -3, -4, -5, -6])
print(a.all())
print(a.any())

False
True

cumprod:累乘
cumsum:累加
diff:与前一个作差

a = np.array([1, 2, 3, 4, 5, 6, 0, -1, -2, -3, -4, -5, -6])
b=a.cumsum()
c=a.cumprod()
d=np.diff(a)
print(b)
print(c)
print(d)

[ 1  3  6 10 15 21 21 20 18 15 11  6  0]
[  1   2   6  24 120 720   0   0   0   0   0   0   0]
[ 1  1  1  1  1 -6 -1 -1 -1 -1 -1 -1]

统计函数:
max,min,mean,median,std,var,sum,quantile

a = np.array([1, 2, 3, 4, 5, 6, 0, -1, -2, -3, -4, -5, -6])
b=a.max()
c=a.min()
d=a.mean()
e=np.median(a)
f=np.std(a)
g=np.var(a)
h=a.sum()
print(b,c,d,e,f,g,h)
print(np.quantile(a,0.25))

6 -6 0.0 0.0 3.7416573867739413 14.0 0
-3.0

cov:协方差
corrcoef:相关系数

a = np.array([1, 2, 3, 4, 5, 6, 0, -1, -2, -3, -4, -5, -6])
b=np.arange(13)

c=np.corrcoef(a,b)
d=np.cov(a,b)
print(c)
print(d)


[[ 1.         -0.80769231]
 [-0.80769231  1.        ]]
[[ 15.16666667 -12.25      ]
 [-12.25        15.16666667]]

axis=0,按行统计,结果为列的指标,axis=1,按列统计,结果为行的指标

a = np.array([1, 2, 3, 4, 5, 6, 0, -1, -2, -3, -4, -5])
a=a.reshape((3,-1))
print(a)
print(a.sum(0))
print(a.sum(1))

[[ 1  2  3  4]
 [ 5  6  0 -1]
 [-2 -3 -4 -5]]
[ 4  5 -1 -2]
[ 10  10 -14]

广播机制

标量和数组:

标量和数组运算,进行逐个操作:

a=np.ones((3,3))
print(a)
b=a*3+1
print(b)
c=1/b
print(c)

[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
 
[[4. 4. 4.]
 [4. 4. 4.]
 [4. 4. 4.]]
 
[[0.25 0.25 0.25]
 [0.25 0.25 0.25]
 [0.25 0.25 0.25]]

两个数组进行运算,需要维度一致。

a=np.ones((3,3))
b=np.full((3,3),2)
c=a+b
print(c)

[[3. 3. 3.]
 [3. 3. 3.]
 [3. 3. 3.]]

一维与二维数组的操作:

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

[[3 4 5]
 [3 4 5]
 [3 4 5]]

将一维扩充为二维再计算.

向量与矩阵的运算:
向量内积:dot

a=np.array([1,2,3])
b=np.arange(3)
c=a.dot(b)
print(c)

8

向量范数与矩阵范数:
np.linalg.norm

a=np.arange(6).reshape(2,3)
print(a)
print(np.linalg.norm(a,'fro'))
print(np.linalg.norm(a,np.inf))
print(np.linalg.norm(a,2))

b=np.arange(4)
print(np.linalg.norm(b,np.inf))
print(np.linalg.norm(b,2))
print(np.linalg.norm(b,3))
[[0 1 2]
 [3 4 5]]
7.416198487095663
12.0
7.3484692283495345
3.0
3.7416573867739413
3.3019272488946263

矩阵相乘:
@

a=np.array([1,2,3,4]).reshape(2,2)
b=np.arange(4).reshape(2,2)
c=a@b
print(c)

[[ 4  7]
 [ 8 15]]

练习:

1、

m1=np.random.rand(2,3)
m2=np.random.rand(3,4)
print(m1.shape[0],m2.shape[1])
a=[(m1[i][k]*m2[k][j]) for i in range(m1.shape[0]) for j in range(m2.shape[1]) for k in range (m1.shape[1])]
print(a)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pandas是一个强大的数据分析库,它提供了许多用于操作时间序列数据的功能。要进行时间戳的计算,你可以使用Pandas中的Datetime模块。 首先,确保你已经导入了Pandas库: ```python import pandas as pd ``` 接下来,你可以使用`pd.to_datetime()`函数将字符串转换成Pandas中的时间戳对象。例如,将一个字符串转换成时间戳对象可以这样做: ```python timestamp = pd.to_datetime('2022-01-01') ``` 你还可以通过`pd.Timestamp()`函数直接创建一个时间戳对象。例如,创建一个表示2022年1月1日的时间戳对象可以这样写: ```python timestamp = pd.Timestamp(year=2022, month=1, day=1) ``` 一旦你有了时间戳对象,你就可以在其基础上进行计算。例如,你可以使用`+`和`-`运算符对时间戳进行加减操作。例如,假设你有一个时间戳对象`timestamp`,你可以使用以下方式进行计算: ```python new_timestamp = timestamp + pd.DateOffset(days=1) # 增加一天 new_timestamp = timestamp - pd.DateOffset(weeks=2) # 减少两周 ``` 除了加减运算之外,你还可以使用`pd.DateOffset()`函数进行更复杂的计算。例如,你可以增加或减少年、月、周、日、小时、分钟、秒等。以下是一些示例: ```python new_timestamp = timestamp + pd.DateOffset(years=1, months=3) # 增加一年零三个月 new_timestamp = timestamp - pd.DateOffset(weeks=2, days=5) # 减少两周零五天 ``` 这些是Pandas中进行时间戳计算的基本方法。希望能对你有所帮助!如有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值