import pandas as pd
import numpy as np
# list转array:np.array(a)
# array 转list:a.tolist()
def testNP():
#创建一维数组 numpy.arange(start, stop, step, dtype)
print(np.arange(10))
#[0 1 2 3 4 5 6 7 8 9]
print(np.ones(2))#一维
print(np.ones(2,2))#二维
print(np.ones(2,2,2))#三维
print(np.full(2,3,3)) # 创建一个2*3的数组,所有元素都填充3
#[[3, 3, 3],[3, 3, 3]]
print(np.eye(3,3)) #创建一个对角线是1的数组
print(np.zeros(shape=(2,5),dtype=int))#shape=(2,5) ,int类型
# [[0 0 0 0 0][0 0 0 0 0]]
print(np.array([1, 2, 3, 4, 5], ndmin=3)) #array设置成为n个维度
# [[[1 2 3 4 5]]]
print(np.array([1, 2, 3], dtype=complex)) #输出为复数
# [1.+0.j 2.+0.j 3.+0.j]
n1 = np.arange(12)
print(n1.reshape((3, 4))) # 改变形状,改成3行4列
# [[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11]]
print(np.random.random((3, 3))) #创建一个0-1之间随机数,shape(3,3)
print(np.linspace(10, 20, 5)) # 将10到20间的数等距取5个
#[10. , 12.5, 15. , 17.5, 20. ]
print(np.random.randint(1, 10, 3)) # 从1到10之间随机取3个整数创建数组
# array([6, 4, 6])
#np.where()[0] 表示行的索引;
#np.where()[1] 则表示列的索引;
print(np.where(np.array([3,4,5,6])>5))
# (array([3], dtype=int64),)
# where函数的使用,可以理解为:
# 1、三个参数np.where(condition, x, y): 满足条件(condition)输出x, 不满足则输出y;
# 2、一个参数np.where(arr): 输出arr中“真”值的坐标,简单理解为不为0的坐标。
n2 = np.arange(27).reshape(3, 3, 3)
print(np.where(n2>5))
#(array([0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2],dtype=int64),
# array([2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2],dtype=int64),
# array([0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2],dtype=int64))
#需要竖着看:020,021,022==[[[6,7,8]]]
print(np.ones(2,2).flatten())#扁平化为一维数组
back = np.arange(36).reshape((4, 9))#变换数组形状
dan=np.array([[0, 1, 2, 3, 4, 5, 6, 7, 8],
[9, 10, 11, 12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23, 24, 25, 26],
[27, 28, 29, 30, 31, 32, 33, 34, 35]])
# 切片:
print(dan[1]) # 取第二行数据
#[9, 10, 11, 12, 13, 14, 15, 16, 17]
print(dan[:2]) # 取前两行数据
# [[0, 1, 2, 3, 4, 5, 6, 7, 8],[9, 10, 11, 12, 13, 14, 15, 16, 17]]
print(dan[::2]) # 每隔一行取一次,步长
# [[0, 1, 2, 3, 4, 5, 6, 7, 8],[18, 19, 20, 21, 22, 23, 24, 25, 26]]
print(dan[1:]) # 取第2行后面所有行
print(dan[[0, -1]]) # 取第一行和最后一行
# [[0, 1, 2, 3, 4, 5, 6, 7, 8],[27, 28, 29, 30, 31, 32, 33, 34, 35]]
print(dan[:, 1]) # 取第2列
# [1, 10, 19, 28]
print(dan[:, 1:3]) # 取第2列到第3列
# [[1, 2],[10, 11],[19, 20],[28, 29]]
print(dan[:, [0, 3]]) # 取第1列和第4列
# [[0, 3],[9, 12],[18, 21],[27, 30]]
print(dan[1:3:, 1:3]) # 取第2、3行中的第2、3列
#[[10, 11],[19, 20]]
print(dan[[0, 2], [1, 3]])
#[ 1, 21]
print(dan[[2, 2, 3, 3], [2, 4, 0, 6]]) # 第3行中第3列、第5列,第4行中第1列、第7列数据
# [20, 22, 27, 33]
print(dan[3,3]) #取单个数据
# 30
# pandas的一些操作
def testPD():
#创建一个Series(创建一个一维数组)
#通过列表创建
s1 = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
#通过字典创建
dict_data = {'a': 0., 'b': 1., 'c': 2.}
s2 = pd.Series(dict_data)
#一个标量创建
s3 = pd.Series(5, index=[0, 1, 2, 3])
#创建一个DataFrame
#通过字典创建DataFrame
data = {'A': ['x', 'y', 'z'], 'B': [1000, 2000, 3000], 'C': [10, 20, 30]}
dfn = pd.DataFrame(data, index=['a', 'b', 'c'])
print(dfn)
#通过二维数组创建DataFrame
dfg = pd.DataFrame(
data=np.random.randint(10, 100, size=(4, 6)),
index=['A', 'B', 'C', 'D'],
columns=['语文', '数学', '英语', '化学', '物理', '生物']
)
print(dfg)
# loc和iloc函数(提取某几列或者行的数据)
# data.iloc[A:B, C:D]
#
# 用法:逗号前面表示的是取哪些行,逗号后面表示取哪些列
# 例如1:data.iloc[0:2, 1:2] # 取第0-2行和1-2列交叉的所有的数据
#
# 例如2:data.iloc[:, 1:2] # 取所有行和1-2列交叉的所有的数据
#
# 例如3:data.iloc[:, :] # 取所有行和所有列的所有的数据
#
# 例如4:data.iloc[:, [1, 2, 3]] # 取所有行和第1,2,3列交叉的所有的数据
# 创建一个Dataframe
data = pd.DataFrame(np.arange(16).reshape(4, 4), index=list('abcd'), columns=list('ABCD'))
print(data)
# 例如1:data.loc[:, 'A'] # 取列名为A的该列的所有数据
#
# 例如2:data.iloc['a':'c', 'A'] # 取行号为a、c的列为A的所有数据
# pd.concat()
# 函数可以沿着指定的轴将多个dataframe或者series拼接到一起,这一点和另一个常用的pd.merge()
# 函数不同,pd.merge()解决数据库样式的左右拼接,不能解决上下拼接
# pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None,
# verify_integrity=False)
# 参数详解:
# objs: 待合并的所有数据集,一般为列表list, list中的元素为series或dataframe
# axis: 合并时参考的轴,axis = 0为基于行合并;axis = 1为列合并, 默认为0
# join: 连接方式为内连接(inner)or外连接(outer)
if __name__=='__main__':
testNP()
testPD()
这个主意一点:
dan=np.array([[0, 1, 2, 3, 4, 5, 6, 7, 8],
[9, 10, 11, 12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23, 24, 25, 26],
[27, 28, 29, 30, 31, 32, 33, 34, 35]])
# 切片:
print(dan[1]) # 取第二行数据
#[9, 10, 11, 12, 13, 14, 15, 16, 17]
print(dan[:2]) # 取前两行数据
# [[0, 1, 2, 3, 4, 5, 6, 7, 8],[9, 10, 11, 12, 13, 14, 15, 16, 17]]
print(dan[::2]) # 每隔一行取一次,步长
# [[0, 1, 2, 3, 4, 5, 6, 7, 8],[18, 19, 20, 21, 22, 23, 24, 25, 26]]
print(dan[1:]) # 取第2行后面所有行
print(dan[[0, -1]]) # 取第一行和最后一行
# [[0, 1, 2, 3, 4, 5, 6, 7, 8],[27, 28, 29, 30, 31, 32, 33, 34, 35]]
print(dan[:, 1]) # 取第2列
# [1, 10, 19, 28]
print(dan[:, 1:3]) # 取第2列到第3列
# [[1, 2],[10, 11],[19, 20],[28, 29]]
print(dan[:, [0, 3]]) # 取第1列和第4列
# [[0, 3],[9, 12],[18, 21],[27, 30]]
print(dan[1:3:, 1:3]) # 取第2、3行中的第2、3列
#[[10, 11],[19, 20]]
print(dan[[0, 2], [1, 3]])
#[ 1, 21]
print(dan[[2, 2, 3, 3], [2, 4, 0, 6]]) # 第3行中第3列、第5列,第4行中第1列、第7列数据
# [20, 22, 27, 33]
print(dan[3,3]) #取单个数据
# 30
#np.arange(start,stop,step,dtype)
# np.random.rand(d0, d1, …, dn):生成一个[0, 1)之间的随机浮点数或N维浮点数组。(d0, d1, …, dn)表示数组的维度
#np.random.randint(low,high,size,dtype)
# np.random.uniform(low,high,size) 生成均匀分布的数据
# np.random.randn(d0, d1, …, dn) 正态分布的随机样本数
# np.random.random((100, 50))生成100行50列随机浮点数,范围是[0,1)
# numpy.random.shuffle(x):对X进行重排序,如果X为多维数组,只沿第一条轴洗牌,输出为None。
# numpy.random.choice(a, size=None, replace=True, p=None):从序列中获取元素,若a为整数,元素取值为np.range(a)
# 中随机数;若a为数组,取值为a数组元素中随机元素。
# numpy.random.standard_normal(size=None):生产一个浮点数或N维浮点数组,取数范围:标准正态分布随机样本
#np.random.narmal(0, 1, 10000)生成均值是0,标准差是1,10000个数据。正态分布是一种对称的、钟形曲线分布,均值、中位数和众数相等。它具有良好的数学性质,
# 广泛用于自然现象、社会科学、工程等领域的建模。