numpy和pandas学习笔记

此学习笔记参考与"莫烦Python”
先来看一个简单的实例:

import numpy as np
# 矩阵转为numpy
array =np.array([[1,2,3],
                [4,5,6]])
print(array)
print("*******************************************************")
print("dimension:", array.ndim)
print("*******************************************************")
print("shape:", array.shape)
print("*******************************************************")
print("size:", array.size)

输出:

[[1 2 3]
 [4 5 6]]
*******************************************************
dimension: 2
*******************************************************
shape: (2, 3)
*******************************************************
size: 6

下面我们看下如何通过numpy创建各种各样的矩阵何数组:

import numpy as np
# 矩阵转为numpy,可以指定数据类型,默认都是64位
array1 =np.array([[1,2,3],
                [4,5,6]], dtype=float)
array2 =np.array([[1,2,3],
                [4,5,6]], dtype=int)
print(array1.dtype)
print("*******************************************************")
print(array2.dtype)

注意:上面我们创建numpy都是直接通过矩阵直接转为numpy,矩阵是几维的,最外层就要有几个中括号。
输出:

float64
*******************************************************
int32
import numpy as np

# 直接创建一些特殊的矩阵
a = np.zeros((3, 4))
b = np.ones((4, 5))
print(a)
print("*******************************************************")
print(b)

输出:
看下面的输出,默认为浮点数

[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
*******************************************************
[[1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]]
import numpy as np
# 生成一个数列,步进为2
a = np.arange(10, 20, 2)
# 生成从0-11的有序数
b = np.arange(12)
# 生成从0-11的有序数,并排成三行四列
c = np.arange(12).reshape((3,4))
print(a)
print("*******************************************************")
print(b)
print("*******************************************************")
print(c)

输出:

[10 12 14 16 18]
*******************************************************
[ 0  1  2  3  4  5  6  7  8  9 10 11]
*******************************************************
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

numpy的基本定义了解了,我们再来看下numpy的计算方式:

import numpy as np
a = np.array([10, 20, 30, 40])
b = np.arange(4)
print(a)
print("*******************************************************")
print(b)
print("*******************************************************")
print(a-b)
print("*******************************************************")
print(a*b)
print("*******************************************************")
# 对b求平方
print(b ** 2)
print("*******************************************************")
print(a ** b)
print("*******************************************************")
# 求a的正弦
print(np.sin(a))
print("*******************************************************")
print(np.cos(b))

输出:

[10 20 30 40]
*******************************************************
[0 1 2 3]
*******************************************************
[10 19 28 37]
*******************************************************
[  0  20  60 120]
*******************************************************
[0 1 4 9]
*******************************************************
[    1    20   900 64000]
*******************************************************
[-0.54402111  0.91294525 -0.98803162  0.74511316]
*******************************************************
[ 1.          0.54030231 -0.41614684 -0.9899925 ]
import numpy as np
a = np.array([10, 20, 30, 40])
b = np.arange(4)
print(a)
print("*******************************************************")
print(b)
print("*******************************************************")
# 判断元素的是否大于某个数
print(b<3)
print("*******************************************************")
print(a>10)
[10 20 30 40]
*******************************************************
[0 1 2 3]
*******************************************************
[ True  True  True False]
*******************************************************
[False  True  True  True]

上面的运算是针对列表的,如果是矩阵呢?

import numpy as np

a = np.array([10, 20, 30, 40]).reshape((2, 2))
b = np.arange(4).reshape((2, 2))
print(a)
print("*******************************************************")
print(b)
print("*******************************************************")
# 点乘
print(a*b)
print("*******************************************************")
# 矩阵乘法
print(np.dot(a, b))
print("*******************************************************")
# 矩阵乘法,跟上面等价
print(a.dot(b))

输出:

[[10 20]
 [30 40]]
*******************************************************
[[0 1]
 [2 3]]
*******************************************************
[[  0  20]
 [ 60 120]]
*******************************************************
[[ 40  70]
 [ 80 150]]
*******************************************************
[[ 40  70]
 [ 80 150]]
import numpy as np
# 创建随机矩阵,范围0-1,大小2行4列
a = np.random.random((2,4))
print(a)
print("*******************************************************")
# 求和,全部数值相加
print(np.sum(a))
print("*******************************************************")
# 最小值
print(np.min(a))
print("*******************************************************")
# 最大值
print(np.max(a))
print("*******************************************************")
# 列数求和
print(np.sum(a, axis=1))
print("*******************************************************")
# 行数求和
print(np.sum(a, axis=0))
print("*******************************************************")
# 列数找最大
print(np.max(a, axis=1))

输出:

[[0.29982972 0.13905535 0.87958354 0.70557501]
 [0.42347836 0.4688335  0.55487963 0.93001836]]
*******************************************************
4.4012534656078515
*******************************************************
0.13905534543526998
*******************************************************
0.9300183580214993
*******************************************************
[2.02404362 2.37720985]
*******************************************************
[0.72330809 0.60788884 1.43446316 1.63559337]
*******************************************************
[0.87958354 0.93001836]
import numpy as np
# 创建numpy矩阵
a = np.arange(2,14).reshape(3, 4)
print(a)
print("*******************************************************")
# 寻找最小值的索引
print(np.argmin(a))
print("*******************************************************")
# 寻找最大值的索引
print(np.argmax(a))
print("*******************************************************")
# 求平均值
print(np.mean(a))
print("*******************************************************")
print(np.average(a))
print("*******************************************************")
# 中位数
print(np.median(a))
print("*******************************************************")
# 逐步累加
print(np.cumsum(a))
print("*******************************************************")
# 每两个数之间的差
print(np.diff(a))
print("*******************************************************")
# 找出非0数,输出结果有两个数组,第一个表示行,第二个表示列
print(np.nonzero(a))
print("*******************************************************")
# 排序
print(np.sort(a))
print("*******************************************************")
# 转置
print(np.transpose(a))
print("*******************************************************")
print(a.T)

输出:

[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]
*******************************************************
0
*******************************************************
11
*******************************************************
7.5
*******************************************************
7.5
*******************************************************
7.5
*******************************************************
[ 2  5  9 14 20 27 35 44 54 65 77 90]
*******************************************************
[[1 1 1]
 [1 1 1]
 [1 1 1]]
*******************************************************
(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
*******************************************************
[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]
*******************************************************
[[ 2  6 10]
 [ 3  7 11]
 [ 4  8 12]
 [ 5  9 13]]
*******************************************************
[[ 2  6 10]
 [ 3  7 11]
 [ 4  8 12]
 [ 5  9 13]]

import numpy as np
# 创建numpy矩阵
a = np.arange(2,14).reshape(3, 4)
print(a)
print("*******************************************************")
# 小于5的数等于5,大于9的数等于9,中间数值不变
print(np.clip(a, 5, 9))
print("*******************************************************")
# 计算行或者列的平均值
print(np.mean(a, axis=1))
[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]
*******************************************************
[[5 5 5 5]
 [6 7 8 9]
 [9 9 9 9]]
*******************************************************
[ 3.5  7.5 11.5]

numy的基本运算讲过了,我们接下来看下numpy的索引

import numpy as np
# 创建numpy矩阵
a = np.arange(3,15)
print(a)
print("*******************************************************")
print(a[3])
print("*******************************************************")
b = np.arange(3,15).reshape((3,4))
print(b)
print("*******************************************************")
# 输出一行的值
print(b[2])
print("*******************************************************")
# 具体到某一行某一列
print(b[2][2])
print("*******************************************************")
# 上面的输出也可以用下面的方法
print(b[2, 2])
print("*******************************************************")
# 输出第二行的所有数
print(b[1,:])
print("*******************************************************")
# 输出第二列的所有数
print(b[:,1])
print("*******************************************************")
# 输出第二行的第二到第三个值,左闭右开
print(b[1,1:2])
print("*******************************************************")
# 迭代每一行
for row in b:
    print(row)
print("*******************************************************")
# 转置之迭代列:
for column in b.T:
    print(column)
print("*******************************************************")
# 迭代每一个元素:
for item in b.flatten():
    print(item)
[ 3  4  5  6  7  8  9 10 11 12 13 14]
*******************************************************
6
*******************************************************
[[ 3  4  5  6]
 [ 7  8  9 10]
 [11 12 13 14]]
*******************************************************
[11 12 13 14]
*******************************************************
13
*******************************************************
13
*******************************************************
[ 7  8  9 10]
*******************************************************
[ 4  8 12]
*******************************************************
[8]
*******************************************************
[3 4 5 6]
[ 7  8  9 10]
[11 12 13 14]
*******************************************************
[ 3  7 11]
[ 4  8 12]
[ 5  9 13]
[ 6 10 14]
*******************************************************
3
4
5
6
7
8
9
10
11
12
13
14

下面我们再来讲下numpy的合并

import numpy as np

# 创建numpy矩阵
a = np.array([1, 1, 1])
b = np.array([2, 2, 2])
print(a.shape)
print("*******************************************************")
print(b.shape)
print("*******************************************************")
# 上下合并
c = np.vstack((a, b))
print(c.shape)
print("*******************************************************")
# 左右合并
d = np.hstack((a, b))
print(d)
print("*******************************************************")
print(d.shape)
print("*******************************************************")
# 把a从一行变成一列(直接转置无法实现)
# 在行方向加一个维度
print(a[np.newaxis, :])
print("*******************************************************")
# 在列方向加一个维度
print(a[:, np.newaxis])
print("*******************************************************")
# 多个numpy的合并
f = np.concatenate((a, b, b, a))
# 多个numpy的合并,也可以指定维度
g = np.concatenate((a, b, b, a), axis=0)
print(f)
print("*******************************************************")
print(g)

输出:

(3,)
*******************************************************
(3,)
*******************************************************
(2, 3)
*******************************************************
[1 1 1 2 2 2]
*******************************************************
(6,)
*******************************************************
[[1 1 1]]
*******************************************************
[[1]
 [1]
 [1]]
*******************************************************
[1 1 1 2 2 2 2 2 2 1 1 1]
*******************************************************
[1 1 1 2 2 2 2 2 2 1 1 1]

下面我们再来讲下numpy的分割, 这个地方用的应该是最多的

import numpy as np

# 创建numpy矩阵
a = np.arange(12).reshape((3, 4))
print(a)
print("*******************************************************")
# 按列进行分割,输出两个array
print(np.split(a, 2, axis=1))
print("*******************************************************")
# 按行进行分割,输出3个array
print(np.split(a, 3, axis=0))
print("*******************************************************")
# 上面的函数只能实现均匀分割,那么怎么实现不等分割呢?
print(np.array_split(a, 3, axis=1))
print("*******************************************************")
# 纵向分割
print(np.vsplit(a, 3))
print("*******************************************************")
# 横向分割
print(np.hsplit(a, 2))
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
*******************************************************
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11]])]
*******************************************************
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
*******************************************************
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2],
       [ 6],
       [10]]), array([[ 3],
       [ 7],
       [11]])]
*******************************************************
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
*******************************************************
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11]])]

上面介绍了分割,下面我们再来介绍下numpy的赋值操作

import numpy as np

# 创建numpy矩阵
a = np.arange(4)
b = a
c = a
print(b is a)
print("*******************************************************")
print(c is a)
print("*******************************************************")
print(a)
print("*******************************************************")
print(b)
print("*******************************************************")
print(c)
# b,c就是a,改变a就等于改变了b,c
a[1] = 2
print(a)
print("*******************************************************")
print(b)
print("*******************************************************")
print(c)
# 如果只想改变a,但是不想改变b,c怎么办呢?用.copy()
b = a.copy()
c = a.copy()
a[2] =1
print(a)
print("*******************************************************")
print(b)
True
*******************************************************
True
*******************************************************
[0 1 2 3]
*******************************************************
[0 1 2 3]
*******************************************************
[0 1 2 3]
[0 2 2 3]
*******************************************************
[0 2 2 3]
*******************************************************
[0 2 2 3]
[0 2 1 3]
*******************************************************
[0 2 2 3]

至此,numpy的基本用法已经讲完了,接着我们来讲下pandas

pandas

numpy更像列表,矩阵,而pandas更像是一个字典 ,可以给不同行列重新命名。

import pandas as pd
import numpy as np

s = pd.Series([1, 3, 6, np.nan, 44, 1])
print(s)

输出:自动加上了序号,并给出了dtype

0     1.0
1     3.0
2     6.0
3     NaN
4    44.0
5     1.0
dtype: float64
import pandas as pd
import numpy as np

# 创建dataframe
dates = pd.date_range('20220824', periods=6)
print(dates)
print("*******************************************************")
# index也可以不给,不给就按照默认的排序
df = pd.DataFrame(np.random.rand(6,4), columns=['a','b','c','d'])
print(df)
print("*******************************************************")
# index表示行索引,columns表示列索引。
df = pd.DataFrame(np.random.rand(6,4), index=dates, columns=['a','b','c','d'])
print(df)
print("*******************************************************")
# 行和列都不给
df = pd.DataFrame(np.random.rand(6,4))
print(df)
print("*******************************************************")
# 每个键值对表示一列
df = pd.DataFrame({'A':1,
                   'B':pd.Timedelta('20220824'),
                   'C':pd.Series(1, index=list(range(4)),dtype="float32"),
                   'D':np.array([3]*4, dtype='int32'),
                   'E':pd.Categorical(['test', 'train', 'test', 'test']),
                   'F': "foo"})
print(df)
print("*******************************************************")
print(df.dtypes)
print("*******************************************************")
# 输出所有行的名字
print(df.index)
print("*******************************************************")
# 输出所有列的名字
print(df.columns)
print("*******************************************************")
# 输出所有值
print(df.values)
print("*******************************************************")
# 描述pd的内容,只能描述数字
print(df.describe())
print("*******************************************************")
# 转置
print(df.T)
print("*******************************************************")
# 按照列index倒序排序
print(df.sort_index(axis=1, ascending=False))
print("*******************************************************")
# 按照行index正序排序
print(df.sort_index(axis=0, ascending=True))
print("*******************************************************")
# 按照value对E列进行排序
print(df.sort_values(by='E'))

输出:

DatetimeIndex(['2022-08-24', '2022-08-25', '2022-08-26', '2022-08-27',
               '2022-08-28', '2022-08-29'],
              dtype='datetime64[ns]', freq='D')
*******************************************************
          a         b         c         d
0  0.322141  0.804775  0.820302  0.835406
1  0.478716  0.763077  0.131844  0.760056
2  0.127714  0.605189  0.052983  0.751993
3  0.701789  0.546006  0.988187  0.229277
4  0.738972  0.896696  0.040440  0.215498
5  0.575188  0.309865  0.222944  0.593111
*******************************************************
                   a         b         c         d
2022-08-24  0.101176  0.453897  0.568296  0.519793
2022-08-25  0.515109  0.772379  0.026976  0.560379
2022-08-26  0.285702  0.345849  0.681108  0.456773
2022-08-27  0.686737  0.493789  0.940539  0.421047
2022-08-28  0.674883  0.128136  0.465080  0.099789
2022-08-29  0.204265  0.312515  0.398608  0.472152
*******************************************************
          0         1         2         3
0  0.084622  0.742653  0.171342  0.851245
1  0.864073  0.133525  0.803310  0.202044
2  0.153710  0.847466  0.276450  0.691162
3  0.252941  0.358187  0.298337  0.639640
4  0.186868  0.060602  0.233869  0.165598
5  0.703033  0.458428  0.615301  0.211415
*******************************************************
   A                         B    C  D      E    F
0  1 0 days 00:00:00.020220824  1.0  3   test  foo
1  1 0 days 00:00:00.020220824  1.0  3  train  foo
2  1 0 days 00:00:00.020220824  1.0  3   test  foo
3  1 0 days 00:00:00.020220824  1.0  3   test  foo
*******************************************************
A              int64
B    timedelta64[ns]
C            float32
D              int32
E           category
F             object
dtype: object
*******************************************************
Int64Index([0, 1, 2, 3], dtype='int64')
*******************************************************
Index(['A', 'B', 'C', 'D', 'E', 'F'], dtype='object')
*******************************************************
[[1 Timedelta('0 days 00:00:00.020220824') 1.0 3 'test' 'foo']
 [1 Timedelta('0 days 00:00:00.020220824') 1.0 3 'train' 'foo']
 [1 Timedelta('0 days 00:00:00.020220824') 1.0 3 'test' 'foo']
 [1 Timedelta('0 days 00:00:00.020220824') 1.0 3 'test' 'foo']]
*******************************************************
         A                          B    C    D
count  4.0                          4  4.0  4.0
mean   1.0  0 days 00:00:00.020220824  1.0  3.0
std    0.0            0 days 00:00:00  0.0  0.0
min    1.0  0 days 00:00:00.020220824  1.0  3.0
25%    1.0  0 days 00:00:00.020220824  1.0  3.0
50%    1.0  0 days 00:00:00.020220824  1.0  3.0
75%    1.0  0 days 00:00:00.020220824  1.0  3.0
max    1.0  0 days 00:00:00.020220824  1.0  3.0
*******************************************************
                           0  ...                          3
A                          1  ...                          1
B  0 days 00:00:00.020220824  ...  0 days 00:00:00.020220824
C                        1.0  ...                        1.0
D                          3  ...                          3
E                       test  ...                       test
F                        foo  ...                        foo

[6 rows x 4 columns]
*******************************************************
     F      E  D    C                         B  A
0  foo   test  3  1.0 0 days 00:00:00.020220824  1
1  foo  train  3  1.0 0 days 00:00:00.020220824  1
2  foo   test  3  1.0 0 days 00:00:00.020220824  1
3  foo   test  3  1.0 0 days 00:00:00.020220824  1
*******************************************************
   A                         B    C  D      E    F
0  1 0 days 00:00:00.020220824  1.0  3   test  foo
1  1 0 days 00:00:00.020220824  1.0  3  train  foo
2  1 0 days 00:00:00.020220824  1.0  3   test  foo
3  1 0 days 00:00:00.020220824  1.0  3   test  foo
*******************************************************
   A                         B    C  D      E    F
0  1 0 days 00:00:00.020220824  1.0  3   test  foo
2  1 0 days 00:00:00.020220824  1.0  3   test  foo
3  1 0 days 00:00:00.020220824  1.0  3   test  foo
1  1 0 days 00:00:00.020220824  1.0  3  train  foo

了解完pandas的基本用法之后,下面我们讲下pandas的数据选择。

import pandas as pd
import numpy as np

# 创建dataframe
dates = pd.date_range('20220824', periods=6)
print(dates)
print("*******************************************************")
# index表示行索引,columns表示列索引。
df = pd.DataFrame(np.random.rand(6,4), index=dates, columns=['a','b','c','d'])
print(df)
print("*******************************************************")
# 输出dataframe的某一列
print(df['a'])
print("*******************************************************")
# 输出dataframe的某一列
print(df.a)
print("*******************************************************")
# 按照切片输出0-3行,左闭右开
print(df[0:3])
print("*******************************************************")
# 或者
print(df['20220824':'20220825'])

输出:

DatetimeIndex(['2022-08-24', '2022-08-25', '2022-08-26', '2022-08-27',
               '2022-08-28', '2022-08-29'],
              dtype='datetime64[ns]', freq='D')
*******************************************************
                   a         b         c         d
2022-08-24  0.646988  0.799752  0.345846  0.554346
2022-08-25  0.865591  0.885551  0.904043  0.211425
2022-08-26  0.343881  0.144555  0.582355  0.000438
2022-08-27  0.085118  0.689027  0.804335  0.019550
2022-08-28  0.924346  0.909819  0.028469  0.137617
2022-08-29  0.706471  0.526320  0.046814  0.199300
*******************************************************
2022-08-24    0.646988
2022-08-25    0.865591
2022-08-26    0.343881
2022-08-27    0.085118
2022-08-28    0.924346
2022-08-29    0.706471
Freq: D, Name: a, dtype: float64
*******************************************************
2022-08-24    0.646988
2022-08-25    0.865591
2022-08-26    0.343881
2022-08-27    0.085118
2022-08-28    0.924346
2022-08-29    0.706471
Freq: D, Name: a, dtype: float64
*******************************************************
                   a         b         c         d
2022-08-24  0.646988  0.799752  0.345846  0.554346
2022-08-25  0.865591  0.885551  0.904043  0.211425
2022-08-26  0.343881  0.144555  0.582355  0.000438
*******************************************************
                   a         b         c         d
2022-08-24  0.646988  0.799752  0.345846  0.554346
2022-08-25  0.865591  0.885551  0.904043  0.211425
import pandas as pd
import numpy as np

# 创建dataframe
dates = pd.date_range('20220824', periods=6)
print(dates)
print("*******************************************************")
# index表示行索引,columns表示列索引。
df = pd.DataFrame(np.random.rand(6, 4), index=dates, columns=['a', 'b', 'c', 'd'])
print(df)
print("*******************************************************")
# 按照标签选择输出,输出20220824这一行
print(df.loc["20220824"])
print("*******************************************************")
# 按照标签选择输出,输出所有行,对列进行筛选,输出a,b列
print(df.loc[:, ['a', 'b']])
print("*******************************************************")
# 按照标签选择输出,输出所某一行,输出a,b列
print(df.loc['20220824', ['a', 'b']])
print("*******************************************************")
# 根据位置进行选择输出,输出第三行的内容
print(df.iloc[3])
print("*******************************************************")
# 根据位置进行选择输出,输出第三行第一位的内容
print(df.iloc[3, 1])
print("*******************************************************")
# 根据位置进行选择输出,输出第三行到第五行,第一位到第三位的内容
print(df.iloc[3:5, 1:3])
print("*******************************************************")
# 根据位置进行选择输出,输出第三行,第三行,第五行,第一位到第三位的内容
print(df.iloc[[1, 3, 5], 1:3])
print("*******************************************************")

# 根据标签和位置一块筛选
print(df.iloc[:3, [0, 2]])
print("*******************************************************")
# 根据是否筛选,筛选a对应的列大于0.5的数,其他的列也会显示
print(df[df.a>0.5])
print("*******************************************************")
DatetimeIndex(['2022-08-24', '2022-08-25', '2022-08-26', '2022-08-27',
               '2022-08-28', '2022-08-29'],
              dtype='datetime64[ns]', freq='D')
*******************************************************
                   a         b         c         d
2022-08-24  0.360561  0.951445  0.368842  0.423700
2022-08-25  0.745406  0.487755  0.082541  0.923315
2022-08-26  0.845194  0.862823  0.102322  0.533116
2022-08-27  0.314568  0.260943  0.317622  0.422537
2022-08-28  0.645892  0.811711  0.868300  0.551252
2022-08-29  0.263214  0.629542  0.901477  0.622732
*******************************************************
a    0.360561
b    0.951445
c    0.368842
d    0.423700
Name: 2022-08-24 00:00:00, dtype: float64
*******************************************************
                   a         b
2022-08-24  0.360561  0.951445
2022-08-25  0.745406  0.487755
2022-08-26  0.845194  0.862823
2022-08-27  0.314568  0.260943
2022-08-28  0.645892  0.811711
2022-08-29  0.263214  0.629542
*******************************************************
a    0.360561
b    0.951445
Name: 2022-08-24 00:00:00, dtype: float64
*******************************************************
a    0.314568
b    0.260943
c    0.317622
d    0.422537
Name: 2022-08-27 00:00:00, dtype: float64
*******************************************************
0.2609427910112532
*******************************************************
                   b         c
2022-08-27  0.260943  0.317622
2022-08-28  0.811711  0.868300
*******************************************************
                   b         c
2022-08-25  0.487755  0.082541
2022-08-27  0.260943  0.317622
2022-08-29  0.629542  0.901477
*******************************************************
                   a         c
2022-08-24  0.360561  0.368842
2022-08-25  0.745406  0.082541
2022-08-26  0.845194  0.102322
*******************************************************
                   a         b         c         d
2022-08-25  0.745406  0.487755  0.082541  0.923315
2022-08-26  0.845194  0.862823  0.102322  0.533116
2022-08-28  0.645892  0.811711  0.868300  0.551252
*******************************************************

接下来我们讲下pandas的设置,给pandas选定的范围赋其他的值

import pandas as pd
import numpy as np

dates = pd.date_range("20220824", periods=6)
df = pd.DataFrame(np.random.rand(6, 4), index=dates, columns=['a', 'b', 'c', 'd'])
print(df)
print("*******************************************************")
# 修改第二列第二行
df.iloc[2, 2] = 111
print(df)
print("*******************************************************")
# 以标签的形式来改
df.loc['20220825', 'b'] = 222
print(df)
print("*******************************************************")
# b列大于0.4的赋值为0,不扩展到整个df上
df.a[df.b > 0.5] = 0
print(df)
print("*******************************************************")
# a列大于0.4的赋值为0,扩展到整个df上全部赋值为0
df[df.a > 0.5] = 0
print(df)
print("*******************************************************")
# 在df上新增一列,index=dates要跟原来的一样
df['e'] = pd.Series([1, 2, 3, 4, 5, 6], index=dates)
print(df)

2022-08-24  0.454015  0.745689  0.486978  0.002213
2022-08-25  0.092632  0.849953  0.246611  0.911748
2022-08-26  0.230064  0.066853  0.718545  0.105528
2022-08-27  0.906299  0.116962  0.244463  0.938455
2022-08-28  0.829681  0.656743  0.379104  0.883769
2022-08-29  0.301219  0.783921  0.842942  0.899679
*******************************************************
                   a         b           c         d
2022-08-24  0.454015  0.745689    0.486978  0.002213
2022-08-25  0.092632  0.849953    0.246611  0.911748
2022-08-26  0.230064  0.066853  111.000000  0.105528
2022-08-27  0.906299  0.116962    0.244463  0.938455
2022-08-28  0.829681  0.656743    0.379104  0.883769
2022-08-29  0.301219  0.783921    0.842942  0.899679
*******************************************************
                   a           b           c         d
2022-08-24  0.454015    0.745689    0.486978  0.002213
2022-08-25  0.092632  222.000000    0.246611  0.911748
2022-08-26  0.230064    0.066853  111.000000  0.105528
2022-08-27  0.906299    0.116962    0.244463  0.938455
2022-08-28  0.829681    0.656743    0.379104  0.883769
2022-08-29  0.301219    0.783921    0.842942  0.899679
*******************************************************
                   a           b           c         d
2022-08-24  0.000000    0.745689    0.486978  0.002213
2022-08-25  0.000000  222.000000    0.246611  0.911748
2022-08-26  0.230064    0.066853  111.000000  0.105528
2022-08-27  0.906299    0.116962    0.244463  0.938455
2022-08-28  0.000000    0.656743    0.379104  0.883769
2022-08-29  0.000000    0.783921    0.842942  0.899679
*******************************************************
                   a           b           c         d
2022-08-24  0.000000    0.745689    0.486978  0.002213
2022-08-25  0.000000  222.000000    0.246611  0.911748
2022-08-26  0.230064    0.066853  111.000000  0.105528
2022-08-27  0.000000    0.000000    0.000000  0.000000
2022-08-28  0.000000    0.656743    0.379104  0.883769
2022-08-29  0.000000    0.783921    0.842942  0.899679
*******************************************************
                   a           b           c         d  e
2022-08-24  0.000000    0.745689    0.486978  0.002213  1
2022-08-25  0.000000  222.000000    0.246611  0.911748  2
2022-08-26  0.230064    0.066853  111.000000  0.105528  3
2022-08-27  0.000000    0.000000    0.000000  0.000000  4
2022-08-28  0.000000    0.656743    0.379104  0.883769  5
2022-08-29  0.000000    0.783921    0.842942  0.899679  6

上面讲了怎么对pandas的修改,赋值,下面我们讲下怎么处理数据丢失的问题,如出现的NaN

import pandas as pd
import numpy as np

dates = pd.date_range("20220824", periods=6)
df = pd.DataFrame(np.random.rand(6, 4), index=dates, columns=['a', 'b', 'c', 'd'])
print(df)
print("*******************************************************")
# 先赋值几个NaN假设数据丢失
df.iloc[0,1] = np.nan
df.iloc[1,2] = np.nan
print(df)
print("*******************************************************")
# 按行/列丢掉nan,把整行丢掉.any表示有一个nan就丢掉整行/列,all的话表示只有全部是nan才丢掉这一行/列,axis=0按行,=1按列
print(df.dropna(axis=0, how="any")) #how={"any","all" }
print("*******************************************************")
print(df.dropna(axis=1, how="any")) #how={"any","all" }
print("*******************************************************")
# 对缺失的数据处理为默认值
print(df.fillna(value=0))
print("*******************************************************")
# 判断是否有缺失数据,any表示至少丢失一个
print(np.any(df.isnull())==True)
print("*******************************************************")

输出:

                   a         b         c         d
2022-08-24  0.314775  0.768203  0.239170  0.144463
2022-08-25  0.360352  0.328783  0.558275  0.658506
2022-08-26  0.174112  0.484550  0.735012  0.683943
2022-08-27  0.304718  0.347889  0.062371  0.349119
2022-08-28  0.836975  0.266244  0.750247  0.723921
2022-08-29  0.777215  0.006923  0.597123  0.616330
*******************************************************
                   a         b         c         d
2022-08-24  0.314775       NaN  0.239170  0.144463
2022-08-25  0.360352  0.328783       NaN  0.658506
2022-08-26  0.174112  0.484550  0.735012  0.683943
2022-08-27  0.304718  0.347889  0.062371  0.349119
2022-08-28  0.836975  0.266244  0.750247  0.723921
2022-08-29  0.777215  0.006923  0.597123  0.616330
*******************************************************
                   a         b         c         d
2022-08-26  0.174112  0.484550  0.735012  0.683943
2022-08-27  0.304718  0.347889  0.062371  0.349119
2022-08-28  0.836975  0.266244  0.750247  0.723921
2022-08-29  0.777215  0.006923  0.597123  0.616330
*******************************************************
                   a         d
2022-08-24  0.314775  0.144463
2022-08-25  0.360352  0.658506
2022-08-26  0.174112  0.683943
2022-08-27  0.304718  0.349119
2022-08-28  0.836975  0.723921
2022-08-29  0.777215  0.616330
*******************************************************
                   a         b         c         d
2022-08-24  0.314775  0.000000  0.239170  0.144463
2022-08-25  0.360352  0.328783  0.000000  0.658506
2022-08-26  0.174112  0.484550  0.735012  0.683943
2022-08-27  0.304718  0.347889  0.062371  0.349119
2022-08-28  0.836975  0.266244  0.750247  0.723921
2022-08-29  0.777215  0.006923  0.597123  0.616330
*******************************************************
True
*******************************************************

上面讲了怎么对丢失的数据处理,下面讲一个非常有用的知识点,pandas怎么实现导入导出,怎么处理已经存储好的表格。可以处理csv,excel,hdf,aql,json,pickle,html等格式
我们要读取的文件如下:
在这里插入图片描述

import pandas as pd
import numpy as np

# 读取,默认加了索引
data = pd.read_csv("D:\\program\\Test\\numpy\\Student data.csv")
print(data)
# 存储
data.to_pickle("student data.pickle")

输出:

    Student ID    name  age gender
0         1000     Tom   10      M
1         1001   Jerry   11      W
2         1002   Chase   12      M
3         1003   Grant   13      M
4         1004    Jack   14      M
5         1005    Pony   15      W
6         1006    Rose   16      W
7         1007  Charse   17      M
8         1008  Victor   18      W
9         1009     Jim   19      W
10        1010     Tim   20      M

在这里插入图片描述
上面我们讲了apndas的文件操作,下面我们再来讲下pandas的合并:

import pandas as pd
import numpy as np
# concat
# 创建三个dataframe
df1 = pd.DataFrame(np.ones((3, 4)) * 0, columns=['a', 'b', 'c', 'd'])
df2 = pd.DataFrame(np.ones((3, 4)) * 1, columns=['a', 'b', 'c', 'd'])
df3 = pd.DataFrame(np.ones((3, 4)) * 2, columns=['a', 'b', 'c', 'd'])
# 数据合并,axis笔试合并方向,按行还是按列。合并之后行列的符号人保留原来的
res = pd.concat([df1, df2, df3], axis=0)
print(res)
print("*******************************************************")
res = pd.concat([df1, df2, df3], axis=1)
print(res)
print("*******************************************************")
# 忽略索引号
res = pd.concat([df1, df2, df3], axis=0, ignore_index=True)
print(res)
print("*******************************************************")
res = pd.concat([df1, df2, df3], axis=1, ignore_index=True)
print(res)
print("*******************************************************")

输出:

     a    b    c    d
0  0.0  0.0  0.0  0.0
1  0.0  0.0  0.0  0.0
2  0.0  0.0  0.0  0.0
0  1.0  1.0  1.0  1.0
1  1.0  1.0  1.0  1.0
2  1.0  1.0  1.0  1.0
0  2.0  2.0  2.0  2.0
1  2.0  2.0  2.0  2.0
2  2.0  2.0  2.0  2.0
*******************************************************
     a    b    c    d    a    b    c    d    a    b    c    d
0  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0  2.0  2.0  2.0  2.0
1  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0  2.0  2.0  2.0  2.0
2  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0  2.0  2.0  2.0  2.0
*******************************************************
     a    b    c    d
0  0.0  0.0  0.0  0.0
1  0.0  0.0  0.0  0.0
2  0.0  0.0  0.0  0.0
3  1.0  1.0  1.0  1.0
4  1.0  1.0  1.0  1.0
5  1.0  1.0  1.0  1.0
6  2.0  2.0  2.0  2.0
7  2.0  2.0  2.0  2.0
8  2.0  2.0  2.0  2.0
*******************************************************
    0    1    2    3    4    5    6    7    8    9    10   11
0  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0  2.0  2.0  2.0  2.0
1  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0  2.0  2.0  2.0  2.0
2  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0  2.0  2.0  2.0  2.0
*******************************************************

import pandas as pd
import numpy as np

# join
# 创建三个dataframe
df1 = pd.DataFrame(np.ones((3, 4)) * 0, columns=['a', 'b', 'c', 'd'], index=[1, 2, 3])
df2 = pd.DataFrame(np.ones((3, 4)) * 1, columns=['b', 'c', 'd', 'e'], index=[2, 3, 4])
print(df1)
print("*******************************************************")
print(df2)
print("*******************************************************")
# 直接合并,一方没有的填充nan, join默认为"outer", axis默认为0
res = pd.concat([df1, df2])
print(res)
print("*******************************************************")
# 只合并相同的地方
res = pd.concat([df1, df2],join="inner",ignore_index=True)
print(res)
print("*******************************************************")
     a    b    c    d
1  0.0  0.0  0.0  0.0
2  0.0  0.0  0.0  0.0
3  0.0  0.0  0.0  0.0
*******************************************************
     b    c    d    e
2  1.0  1.0  1.0  1.0
3  1.0  1.0  1.0  1.0
4  1.0  1.0  1.0  1.0
*******************************************************
     a    b    c    d    e
1  0.0  0.0  0.0  0.0  NaN
2  0.0  0.0  0.0  0.0  NaN
3  0.0  0.0  0.0  0.0  NaN
2  NaN  1.0  1.0  1.0  1.0
3  NaN  1.0  1.0  1.0  1.0
4  NaN  1.0  1.0  1.0  1.0
*******************************************************
     b    c    d
0  0.0  0.0  0.0
1  0.0  0.0  0.0
2  0.0  0.0  0.0
3  1.0  1.0  1.0
4  1.0  1.0  1.0
5  1.0  1.0  1.0
*******************************************************
import pandas as pd
import numpy as np

# join
# 创建三个dataframe
df1 = pd.DataFrame(np.ones((3, 4)) * 0, columns=['a', 'b', 'c', 'd'], index=[1, 2, 3])
df2 = pd.DataFrame(np.ones((3, 4)) * 1, columns=['b', 'c', 'd', 'e'], index=[2, 3, 4])
print(df1)
print("*******************************************************")
print(df2)
print("*******************************************************")
res = pd.concat([df1, df2], axis=1)
print(res)
print("*******************************************************")
# 左右合并,行号不一样有冲突,一方没有的填充nan。加一个reindex(df1.index)表示按照df1的行号排序
res = pd.concat([df1, df2], axis=1).reindex(df1.index)
print(res)
print("*******************************************************")

     a    b    c    d
1  0.0  0.0  0.0  0.0
2  0.0  0.0  0.0  0.0
3  0.0  0.0  0.0  0.0
*******************************************************
     b    c    d    e
2  1.0  1.0  1.0  1.0
3  1.0  1.0  1.0  1.0
4  1.0  1.0  1.0  1.0
*******************************************************
     a    b    c    d    b    c    d    e
1  0.0  0.0  0.0  0.0  NaN  NaN  NaN  NaN
2  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0
3  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0
4  NaN  NaN  NaN  NaN  1.0  1.0  1.0  1.0
*******************************************************
     a    b    c    d    b    c    d    e
1  0.0  0.0  0.0  0.0  NaN  NaN  NaN  NaN
2  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0
3  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0
*******************************************************
import pandas as pd
import numpy as np

# join
# 创建三个dataframe
df1 = pd.DataFrame(np.ones((3, 4)) * 0, columns=['a', 'b', 'c', 'd'], index=[1, 2, 3])
df2 = pd.DataFrame(np.ones((3, 4)) * 1, columns=['b', 'c', 'd', 'e'], index=[2, 3, 4])
print(df1)
print("*******************************************************")
print(df2)
print("*******************************************************")
# 默认axis=0
res = df1.append(df2, ignore_index=True)
print(res)
print("*******************************************************")
# 也可以添加列表
res = df1.append([df2, df1], ignore_index=True)
print(res)
print("*******************************************************")
# 一项一项的添加
s1 = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
res = df1.append(s1, ignore_index=True)
print(res)

     a    b    c    d
1  0.0  0.0  0.0  0.0
2  0.0  0.0  0.0  0.0
3  0.0  0.0  0.0  0.0
*******************************************************
     b    c    d    e
2  1.0  1.0  1.0  1.0
3  1.0  1.0  1.0  1.0
4  1.0  1.0  1.0  1.0
*******************************************************
     a    b    c    d    e
0  0.0  0.0  0.0  0.0  NaN
1  0.0  0.0  0.0  0.0  NaN
2  0.0  0.0  0.0  0.0  NaN
3  NaN  1.0  1.0  1.0  1.0
4  NaN  1.0  1.0  1.0  1.0
5  NaN  1.0  1.0  1.0  1.0
*******************************************************
     a    b    c    d    e
0  0.0  0.0  0.0  0.0  NaN
1  0.0  0.0  0.0  0.0  NaN
2  0.0  0.0  0.0  0.0  NaN
3  NaN  1.0  1.0  1.0  1.0
4  NaN  1.0  1.0  1.0  1.0
5  NaN  1.0  1.0  1.0  1.0
6  0.0  0.0  0.0  0.0  NaN
7  0.0  0.0  0.0  0.0  NaN
8  0.0  0.0  0.0  0.0  NaN
*******************************************************
     a    b    c    d
0  0.0  0.0  0.0  0.0
1  0.0  0.0  0.0  0.0
2  0.0  0.0  0.0  0.0
3  1.0  2.0  3.0  4.0

上面我们讲了关于concat的用法,下面我们再来讲下关于merge的使用教程

import pandas as pd
import numpy as np

# merge:对两组的dataframe的key或者index进行合并。
# 创建两个dataframe
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                     'A': ['A0', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                      'C': ['C0', 'C1', 'C2', 'C3'],
                      'D': ['D0', 'D1', 'D2', 'D3']})
print(left)
print("*******************************************************")
print(right)
print("*******************************************************")
# 按照key进行合并
res = pd.merge(left, right, on="key")
print(res)
print("*******************************************************")

输出:

  key   A   B
0  K0  A0  B0
1  K1  A1  B1
2  K2  A2  B2
3  K3  A3  B3
*******************************************************
  key   C   D
0  K0  C0  D0
1  K1  C1  D1
2  K2  C2  D2
3  K3  C3  D3
*******************************************************
  key   A   B   C   D
0  K0  A0  B0  C0  D0
1  K1  A1  B1  C1  D1
2  K2  A2  B2  C2  D2
3  K3  A3  B3  C3  D3
*******************************************************

import pandas as pd
import numpy as np

# merge:对两组的dataframe的key或者index进行合并。
# 创建两个dataframe,如果有两个key呢?
left = pd.DataFrame({'key1': ['K0', 'K1', 'K2', 'K3'],
                     'key2': ['K0', 'K1', 'K0', 'K1'],
                     'A': ['A0', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key1': ['K0', 'K1', 'K2', 'K3'],
                      'key2': ['K0', 'K0', 'K0', 'K0'],
                      'C': ['C0', 'C1', 'C2', 'C3'],
                      'D': ['D0', 'D1', 'D2', 'D3']})
print(left)
print("*******************************************************")
print(right)
print("*******************************************************")
# 按照key1,key2进行合并,默认how='inner' ,只考虑相同的部分,how有四种取值["left", 'right', 'outer', 'inner']
res = pd.merge(left, right, on=["key1", "key2"])
print(res)
print("*******************************************************")
res = pd.merge(left, right, on=["key1", "key2"], how="right")
print(res)
print("*******************************************************")
res = pd.merge(left, right, on=["key1", "key2"], how="left")
print(res)
print("*******************************************************")
  key1 key2   A   B
0   K0   K0  A0  B0
1   K1   K1  A1  B1
2   K2   K0  A2  B2
3   K3   K1  A3  B3
*******************************************************
  key1 key2   C   D
0   K0   K0  C0  D0
1   K1   K0  C1  D1
2   K2   K0  C2  D2
3   K3   K0  C3  D3
*******************************************************
  key1 key2   A   B   C   D
0   K0   K0  A0  B0  C0  D0
1   K2   K0  A2  B2  C2  D2
*******************************************************
  key1 key2    A    B   C   D
0   K0   K0   A0   B0  C0  D0
1   K1   K0  NaN  NaN  C1  D1
2   K2   K0   A2   B2  C2  D2
3   K3   K0  NaN  NaN  C3  D3
*******************************************************
  key1 key2   A   B    C    D
0   K0   K0  A0  B0   C0   D0
1   K1   K1  A1  B1  NaN  NaN
2   K2   K0  A2  B2   C2   D2
3   K3   K1  A3  B3  NaN  NaN
*******************************************************
import pandas as pd
import numpy as np

# indicator参数
df1 = pd.DataFrame({'col1': [0, 1], "col_left": ['a', 'b']})
df2 = pd.DataFrame({'col1': [1, 2, 2], "col_right": [2, 2, 2]})
print(df1)
print("*******************************************************")
print(df2)
print("*******************************************************")
# indicator默认为False,最后一列告诉你合并方式,_merge的名字可以修改, 把True改成自己的名字即可
res = pd.merge(df1, df2, on='col1', how='outer', indicator=True)
print(res)
   col1 col_left
0     0        a
1     1        b
*******************************************************
   col1  col_right
0     1          2
1     2          2
2     2          2
*******************************************************
   col1 col_left  col_right      _merge
0     0        a        NaN   left_only
1     1        b        2.0        both
2     2      NaN        2.0  right_only
3     2      NaN        2.0  right_only
import pandas as pd
import numpy as np

# 按照index合并
# merge:对两组的dataframe的key或者index进行合并。
# 创建两个dataframe
left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3']},
                    index=['K0', 'K1', 'K2', 'K3'])
right = pd.DataFrame({
    'C': ['C0', 'C1', 'C2', 'C3'],
    'D': ['D0', 'D1', 'D2', 'D3']},
    index=['K0', 'K1', 'K2', 'K3'])
print(left)
print("*******************************************************")
print(right)
print("*******************************************************")
res = pd.merge(left, right, left_index=True, right_index=True, how='outer')
print(res)
print("*******************************************************")

     A   B
K0  A0  B0
K1  A1  B1
K2  A2  B2
K3  A3  B3
*******************************************************
     C   D
K0  C0  D0
K1  C1  D1
K2  C2  D2
K3  C3  D3
*******************************************************
     A   B   C   D
K0  A0  B0  C0  D0
K1  A1  B1  C1  D1
K2  A2  B2  C2  D2
K3  A3  B3  C3  D3
*******************************************************
import pandas as pd
import numpy as np

# 与重读怎么合并,如下两个dataframe的age重复,怎么合并?
boys = pd.DataFrame({'k': ['K0', 'K1', 'K2'], 'age': [1, 2, 3]})
girls = pd.DataFrame({'k': ['K0', 'K1', 'K2'], 'age': [4, 5, 6]})
print(boys)
print("*******************************************************")
print(girls)
print("*******************************************************")
# '_boy', '_girl'区分名字相同含义不同的数据
res = pd.merge(boys, girls, on='k', suffixes=['_boy', '_girl'], how='inner')
print(res)

# join的功能跟merge的功能很相似
    k  age
0  K0    1
1  K1    2
2  K2    3
*******************************************************
    k  age
0  K0    4
1  K1    5
2  K2    6
*******************************************************
    k  age_boy  age_girl
0  K0        1         4
1  K1        2         5
2  K2        3         6

上面讲的都是数据,那么我们可不可以把这些数据通过图像的方式展示出来呢,可以的。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 随机生成1000个数据,线性的
data = pd.Series(np.random.randn(1000), index=np.arange(1000))
data = data.cumsum()
# 那数据方放到图上,data本来就是数据了,直接放在plot上面即可,具体plot的用法可自行google
data.plot()
plt.show()

在这里插入图片描述

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 随机生成1000个数据,矩阵
data = pd.DataFrame(np.random.randn(1000, 4), index=np.arange(1000), columns=list("ABCD"))
# 输出前5个数据
print(data.head(5))
# 累加便于查看图像,不然图像数据都堆在一块
data = data.cumsum()
data.plot()
plt.show()
          A         B         C         D
0 -0.841673  1.120628 -0.596660  0.943178
1  0.957905 -2.048079  0.090298  1.913352
2 -0.658881 -1.536420  1.184568  0.520136
3 -0.569689 -0.121283  2.189686  1.548651
4  0.902207  0.813209  1.860842  0.114137

在这里插入图片描述

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 随机生成1000个数据,矩阵
data = pd.DataFrame(np.random.randn(1000, 4), index=np.arange(1000), columns=list("ABCD"))
# 输出前5个数据
print(data.head(5))
# 累加便于查看图像,不然图像数据都堆在一块
data = data.cumsum()
#  plot methods: bar, hist, box, area, kde, scatter, pie...
ax = data.plot.scatter(x='A', y='B', color='DarkBlue', label='Class 1')
# ax=ax表示 把这一组data赋值在ax中,就只在一张表上画两个图
data.plot.scatter(x='A', y='C', color='Darkred', label='Class 2',  ax=ax)
plt.show()
          A         B         C         D
0 -2.031922  0.455693  0.668387 -1.897108
1  1.572124 -0.529235  0.123780 -0.206429
2  0.538136  1.539324  0.892129 -0.594824
3 -0.209559  0.255818 -0.134298 -0.290419
4  1.205846 -1.215146  0.467695  0.016468

在这里插入图片描述
至此,关于numpy的基本内容基本上讲完了,欢迎各位大佬批评指正。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: numpy是一个高性能的科学计算库,用于处理大型数据集和矩阵运算。它是Python科学计算生态系统中最重要的库之一,提供了丰富的功能和工具。 在numpy学习过程中,我创建了一个名为"numpy笔记.xmind"的思维导图来总结和记录重要的概念和函数。 首先,我在思维导图中列出了numpy的基本数据结构,包括多维数组(ndarray)、切片和索引。我理解了如何创建和操作这些数据结构,以及如何使用切片和索引访问数组中的元素。 其次,在思维导图中,我详细记录了numpy中的常用函数和方法。这些函数包括数学运算(如加法、乘法和指数运算)、统计函数(如平均值、标准差和方差)和数组操作(如形状变换、拼接和切割)。对于每个函数,我还注明了其参数和用法,以便以后参考。 此外,我还在思维导图中添加了numpy的广播功能和ufunc函数。广播允许我们在不同形状的数组之间进行元素级别的操作,而ufunc函数则可以对数组进行逐元素的函数调用。对于这两个功能,我记录了它们的应用场景和使用方法。 最后,我在思维导图中补充了一些numpy的高级特性和应用,如随机数生成、文件IO以及与其他科学计算库(如pandas和matplotlib)的集成。这些特性和应用使numpy成为了进行数据分析和科学计算的重要工具。 通过创建和总结"numpy笔记.xmind"这个思维导图,我能够更好地理解和掌握numpy的知识。这份笔记将成为我学习和使用numpy的重要参考资料,帮助我在科学计算和数据分析的过程中提高效率和准确性。 ### 回答2: numpy(Numerical Python)是Python中用于进行科学计算的一个库。它提供了丰富的高性能数值计算工具,特别是对于大规模多维数组的操作。下面是关于numpy的一些笔记。 1. 数组的创建:numpy使用ndarray对象来存储多维数组。可以使用numpy.array()函数创建数组,也可以使用numpy.zeros()、numpy.ones()等函数创建特定初始值的数组。 2. 数组的属性:可以使用ndarray的属性来获取数组的形状、大小、数据类型等信息。例如,shape属性可以得到数组的维度大小,dtype属性可以得到数组的数据类型。 3. 数组的索引和切片:可以通过索引来访问数组中的元素。numpy中的索引从0开始,可以使用负数表示相对于数组尾部的位置。切片可以用来获取数组的部分元素。可以使用冒号分隔切片的起始、结束和步长值。 4. 数组的运算:numpy支持对数组的逐元素运算,包括加减乘除、求幂、取余等。可以使用numpy的函数进行常见的数学运算,也可以使用ndarray对象的方法进行相应的操作。 5. 广播:numpy中的广播机制可以自动处理形状不一致的数组之间的运算。广播可以使得形状不一致的数组能够按需扩展以便进行元素运算,而不需要进行明确的形状调整操作。 6. 数组的重塑和转置:可以使用reshape()函数对数组进行重新排列,改变其形状。transpose()函数可以用来进行数组的转置操作。 7. 数组的聚合操作:numpy提供了很多用于数组聚合操作的函数,例如对数组进行求和、求平均、求最大最小值等。 8. 数组的存储和读取:可以使用numpy提供的函数将数组保存到文件中,也可以使用numpy的load()函数从文件中加载数组。 以上是关于numpy的一些基础笔记numpy在科学计算、数据分析等领域具有广泛的应用。掌握numpy的基本操作和常用函数,能够更高效地进行数值计算和数据处理任务。 ### 回答3: numpy是一个开源的Python库,提供了高效的多维数组对象以及对数组操作的函数。笔记.xmind是一种思维导图的文件格式。结合两者,我可以将numpy的使用方法和相关概念通过思维导图的方式记录下来。 在笔记.xmind中,我可以使用中心主题表示numpy,然后通过子主题展开numpy的各个方面。例如,我可以创建一个子主题来介绍numpy的数组对象,包括数组的创建、形状、类型等信息。另外,我还可以创建子主题来记录numpy数组操作的函数,例如数组的索引与切片操作、数组的运算操作等。在每个子主题中,我可以使用节点来记录具体的代码示例,以及相关的说明和注意事项。 除了记录numpy的使用方法外,我还可以创建子主题来介绍numpy中的常用概念和特性。例如,我可以创建一个子主题来介绍numpy中的广播机制,以及在数组运算中的应用。另外,我还可以创建子主题来介绍numpy中的向量化操作和矩阵运算,以及其在科学计算中的重要性。 在整个思维导图中,我可以使用不同的颜色、字体和图标来区分不同的主题或节点,以便更好地组织和呈现信息。可以使用箭头来表示不同主题之间的关系,例如通过箭头表示某个主题是另一个主题的子主题或相关主题。 通过将numpy的使用方法和相关概念以思维导图的形式记录在笔记.xmind中,我可以更清晰地了解和掌握numpy的知识,并且可以随时查阅和复习。这样可以帮助我更好地应用numpy进行数据分析和科学计算,并提高工作效率和代码质量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I松风水月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值