資料準備是一項必須具備的技術,是一個疊代且靈活的過程,可以用于查找、組合、清理、轉換和共享資料集,包括用于分析/商業智能(BI)、資料科學/機器學習(ML)和自主資料內建中。具體來說,資料準備是在處理和分析之前對原始資料進行清洗和轉換的過程,通常包括重新格式化資料、更正資料群組合資料集來豐富資料等。
本次資料分析實戰系列運用股市金融資料,并對其進行一些列分析處理。處理金融資料是量化分析的基礎,當然方法都是通用的,換做其他資料也同樣适用。本文回顧資料分析常用子產品
Pandas
和
NumPy
,回顧
DataFrame
、
array
、
matrix
基本操作。
股市資料擷取的幾個子產品
Tushare
Tushare是一個免費、開源的python财經資料接口包。主要實作對股票等金融資料從資料采集、清洗加工到資料存儲的過程,能夠為金融分析人員提供快速、整潔、和多樣的便于分析的資料,為他們在資料擷取方面極大地減輕工作量,使他們更加專注于政策和模型的研究與實作上。
- 首先使用pip安裝第三方依賴庫
下載下傳股市資料。(國内)tushare
pip install tushare -i https://pypi.douban.com/simple/
複制
- 然後在
注冊使用者,注意擷取你自己的tushare.pro
。使用token
函數擷取日線資料。daily
# 導入tushare庫
import tushare as ts
# 設定token
ts.set_token('your token here')
# 初始化pro接口
pro = ts.pro_api()
# 擷取日線資料
df = pro.daily(ts_code='000001.SZ', start_date='20180701', end_date='20180718'
複制
Baostock
證券寶(http://www.baostock.com)是一個免費、開源的證券資料平台(無需注冊)。提供大量準确、完整的證券曆史行情資料、上市公司财務資料等。通過python API獲驗證券資料資訊,滿足量化交易投資者、數量金融愛好者、計量經濟從業者資料需求。
- 首先使用pip安裝第三方依賴庫
下載下傳股市資料。(國内)baostock
pip install baostock -i https://pypi.douban.com/simple/
複制
- 然後使用
函數擷取日線資料query_history_k_data_plus
import baostock as bs
import pandas as pd
# 登陸系統
lg = bs.login()
# 擷取滬深A股曆史K線資料
rs_result = bs.query_history_k_data_plus("sh.600000",
fields="date,open,high, low, close,preclose,volume,amount,adjustflag",
start_date='2017-07-01',
end_date='2017-12-31',
frequency="d",
adjustflag="3")
df_result = rs_result.get_data()
# 登出系統
bs.logout()
複制
Yfinance
yfinance
的老版本是
fix_yahoo_finance
,二者都可以使用,推薦使用新版本。
- 首先使用pip安裝第三方依賴庫
下載下傳fix_yahoo_finance
股市資料。(國外)yahoo
pip install fix_yahoo_finance -i https://pypi.douban.com/simple/
複制
如果發生報錯:
ModuleNotFoundError: No module named 'yfinance'
,則需要事先安裝
'yfinance'
,最新版本已經将
fix_yahoo_finance
調整
'yfinance'
為
pip install yfinance -i https://pypi.douban.com/simple/
複制
- 然後使用
函數擷取日線資料pdr_override
import yfinance as yf
# 輸入
symbol = 'AMD'
start = '2014-01-01'
end = '2018-08-27'
dataset=yf.pdr_override(symbol,start,end)
dataset.head()
複制
下面開始本節主要内容,運用資料處理最常用的第三方子產品
Pandas
和
NumPy
擷取資料,為後續資料分析、機器學習做資料準備。
pandas
pandas 是基于NumPy 的一種工具,該工具是為解決資料分析任務而建立的。Pandas 納入了大量庫和一些标準的資料模型,提供了高效地操作大型資料集所需的工具。pandas提供了大量能使我們快速便捷地處理資料的函數和方法。你很快就會發現,它是使Python成為強大而高效的資料分析環境的重要因素之一。
# Pandas Library
>>> import pandas as pd
>>> import warnings
>>> warnings.filterwarnings("ignore")
複制
擷取中國平安股票資料
>>> import baostock as bs
# 登陸系統
>>> lg = bs.login()
# 擷取滬深A股曆史K線資料
>>> rs_result = bs.query_history_k_data_plus("sh.601318",
fields="date,open,high,low,close,volume",
start_date='2018-01-01',
end_date='2021-03-31',
frequency="d",
adjustflag="3")
>>> df_result = rs_result.get_data()
# 登出系統
>>> bs.logout()
login success!
logout success!
<baostock.data.resultset.ResultData at 0x28d05a44ac8>
>>> df_result.head()
複制
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICMyYTMvw1dvwlMvwlM3VWaWV2Zh1Wa-cmbw5ia6NjN4InaxxWbvw1N1QjN1cDOtUGall3LcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.png)
擷取騰訊股票資料
>>> import yfinance as yf
>>> symbol = 'TCEHY'
>>> start = '2016-01-01'
>>> end = '2021-03-31'
>>> yf.pdr_override()
>>> dataset = yf.download(symbol,start,end)
[*********************100%***********************] 1 of 1 completed
>>> dataset.head()
複制
檢視尾部資料
dataset.tail()
複制
>>> dataset.shape
(1320, 6)
複制
滾動視窗計算
dataset.rolling(window=5).mean() # 求最後4行的均值
複制
- 函數解析
dataset.rolling(
window,
min_periods=None,
center=False,
win_type=None,
on=None,
axis=0,
closed=None,)
複制
提供滾動視窗計算。
window:也可以省略不寫。表示時間窗的大小,注意有兩種形式(int or offset)。如果使用int,則數值表示計算統計量的觀測值的數量即向前幾個資料。 如果是offset類型,表示時間窗的大小。
min_periods:每個視窗最少包含的觀測值數量,小于這個值的視窗結果為NA。值可以是int,預設None。offset情況下,預設為1。
center: 把視窗的标簽設定為居中。布爾型,預設False,居右
win_type: 視窗的類型。截取窗的各種函數。字元串類型,預設為None。各種類型
on: 可選參數。對于dataframe而言,指定要計算滾動視窗的列。值為列名。
axis: int、字元串,預設為0,即對列進行計算
closed:定義區間的開閉,支援int類型的window。對于offset類型預設是左開右閉的即預設為right。可以根據情況指定為left both等。
指數權重函數ewm
>>> dataset['ewm'] = dataset['Adj Close'].ewm(span=20,
min_periods=0,
adjust=False,
ignore_na=False).mean()
>>> dataset.head()
複制
- 函數解析
DataFrame.ewm(com=None,
span=None,
halflife=None,
alpha=None,
min_periods=0,
adjust=True,
ignore_na=False,
axis=0,
times=None)
複制
提供指數權重(EW)函數。可用EW功能:
mean()
,
var()
,
std()
,
corr()
,
cov()
。參數:
com
,
span
,
halflife
,或
alpha
必須提供。
com float, optional
根據質心指定衰減,
\alpha = 1/(1+com), com\ge 0
span float, optional
跨度,根據跨度指定衰減,
\alpha=2/(span+1), span\ge1
halflife float, str, timedelta, optional
半衰期,根據半衰期指定衰減,
α=1−\exp(−\ln(2)/halflife),halflife > 0
如果
times
指定,則觀察值衰減到其值一半的時間機關(str或timedelta)。僅适用于
mean()
,半衰期值不适用于其他功能。
alpha float, optional
直接地指定平滑系數
\alpha
,
0<\alpha \le1
min_periods int, default 0
視窗中具有值的最小觀察數(否則結果為NA)。
adjust bool, default True
調整,在開始期間除以遞減的調整因子,以解決相對權重的不平衡問題(将EWMA視為移動平均值)。
- 當
(預設)時,EW功能是使用權重計算的adjust=True
w_i=(1−α)^i
。例如,該系列的EW移動平均值
[x_0,x_1,...,x_t]
将會
y_t= \frac{x_t+(1-\alpha)x_{t-1}+(1-\alpha)^2x_{t-2}+...+(1-\alpha)^tx_0}{1+(1-\alpha)+(1-\alpha)^2+...++(1-\alpha)^t}
- 當
為時,将以遞歸方式計算指數權重函數:adjust=False
y_0=x_0 \\
y_t=(1-\alpha)y_{t-1}+\alpha x_t
ignore_na bool, default False
計算權重時忽略缺失值;指定
True
重制0.15.0之前的行為。
- 當
(預設)時,權重基于絕對位置。例如,權重ignore_na=False
x_0
和
x_2
用于計算
[x0, None, x2]
的最終權重平均數,如果
adjust=True
,則權重分别是
(1−\alpha)^2
和 1。如果
adjust=False
,權重分别是
(1−\alpha)^2
和
\alpha
- 當
時,權重基于相對位置。例如,權重ignore_na=True
x_0
和
x_2
用于計算
[x0, None, x2]
的最終權重平均數,如果
adjust=True
,則權重分别是
1−\alpha
1。如果
adjust=False
,權重分别是
1−\alpha
和
\alpha
提取資料
# iloc[]
>>> print(dataset.iloc[0][0])
19.59000015258789
# iat[]
>>> print(dataset.iat[0,0])
19.59000015258789
複制
的使用方法與loc類似,但是比
at
有更快的通路資料的速度,而且隻能通路單個元素,不能通路多個元素。
loc
與
iat
類似。
iloc
# loc[]
>>> print(df.loc[0]['High'])
19.65999984741211
# iloc[]
>>> print(df.iloc[0])
複制
Date 2015-12-31 00:00:00
Open 19.59
High 19.66
Low 19.51
Close 19.62
Adj Close 19.3691
Volume 382600
ewm 19.3691
Name: 0, dtype: object
重置索引
>>> df = dataset.reset_index()
>>> df.head()
複制
删除列
# 删除資料
>>> new_df = df.drop(['Date'], axis=1)
>>> new_df.head()
複制
添加列
# 添加日期
>>> new_column = df['Date']
>>> new_df['Date'] = new_column
>>> new_df.head()
複制
移動列
# 将 Date 移動至第一列
>>> cols = list(new_df)
>>> cols.insert(0, cols.pop(cols.index('Date')))
>>> cols
['Date', 'Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume', 'ewm']
# loc是DataFrame有索引标記的值的
>>> new_df = new_df.loc[:, cols]
>>> new_df.head()
複制
删除列
>>> del new_df['Close']
>>> new_df.head()
複制
重命名列
- 重命名
>>> new_df = new_df.rename(index=str,
columns={'Adj Close':'Close'})
>>> new_df.head()
複制
- 列名改為大寫
>>> new_df.rename(str.upper, axis='columns')
複制
- 列名改為小寫
# column name to lower case
new_df.rename(str.lower, axis='columns')
複制
選擇多個列
>>> new_df[new_df.columns[1:5]]
複制
選擇多個行
>>> new_df[1:4]
複制
建立Dataframe
>>> stock_df = pd.DataFrame([[123.50, 145.35, 165.50],
[152.35, 154.67, 160.35],
[201.25, 236.54, 254.69]],
columns=['IBM', 'Apple', 'Tesla'])
>>> stock_df
複制
IBM | Apple | Tesla | |
---|---|---|---|
123.50 | 145.35 | 165.50 | |
1 | 152.35 | 154.67 | 160.35 |
2 | 201.25 | 236.54 | 254.69 |
替換資料
>>> stock_df = stock_df.replace([201.25, 145.35], [888, 888])
>>> stock_df
複制
IBM | Apple | Tesla | |
---|---|---|---|
123.50 | 888.00 | 165.50 | |
1 | 152.35 | 154.67 | 160.35 |
2 | 888.00 | 236.54 | 254.69 |
>>> stock_df = stock_df.replace([165.50, 160.35], ['NaN', 'NaN'])
>>> stock_df
複制
IBM | Apple | Tesla | |
---|---|---|---|
123.5 | 888 | NaN | |
1 | 152.35 | 154.67 | NaN |
2 | 888 | 236.54 | 254.69 |
擷取資料框資料
>>> for index, row in stock_df.iterrows() :
... print(row['IBM'], row['Apple'])
123.5 888.0
152.35 154.67
888.0 236.54
複制
當然,前面這篇pandas/numpy高效資料處理方法總結裡列舉了很多實用方法,大家可随時檢視。
NumPy
NumPy是專為簡化Python中的數組運算而設計的,每個NumPy數組都具有以下屬性:
- ndim:維數。
- shape:每一維的大小。
- size:數組中元素的總數。
- dtype:數組的資料類型(例如int、float、string等)。
# Numpy 子產品
>>> import numpy as np
複制
将資料集轉換為numpy
# 将打開的DataFrame轉換為numpy數組
>>> Open_array = np.array(dataset['Open'])
>>> Open_array
array([19.59000015, 19.12999916, 19.09000015, ..., 79.44000244,
79.19000244, 78.56999969])
複制
檢視單個元素
>>> print("First element:", Open_array [0])
>>> print("Second element:", Open_array [1])
>>> print("Second last element:", Open_array[-1])
First element: 19.59000015258789
Second element: 19.1299991607666
Second last element: 78.56999969482422
複制
檢視多個元素
>>> print(Open_array[2:5]) # 第3個到第5個
[19.09000015 18.63999939 18.04999924]
>>> print(Open_array[:-5]) # 從開始到最後第4個
[19.59000015 19.12999916 19.09000015 ... 80.69999695 81.90000153
81.65000153]
>>> print(Open_array[5:]) # 第6個到最後
[18.32999992 17.76000023 17.64999962 ... 79.44000244 79.19000244
78.56999969]
>>> print(Open_array[:]) # 開始到最後
[19.59000015 19.12999916 19.09000015 ... 79.44000244 79.19000244
78.56999969]
複制
修改元素
- 改變第一個元素
>>> volume = np.array(dataset['Volume'])
>>> volume[0] = 0
>>> print(volume)
[ 0 469100 170300 ... 5923100 3468900 1715900]
複制
- 改變多個元素
# 更改第3到5個元素
>>> volume[2:5] = np.array([4, 6, 8])
>>> print(volume)
[ 0 469100 4 ... 5923100 3468900 1715900]
複制
增加元素
>>> add_numbers = np.array([1, 2, 3])
>>> np.concatenate((volume, add_numbers)
array([ 0, 469100, 4, ..., 1, 2, 3], dtype=int64)
>>> np.append(volume, add_numbers, axis=0)
array([ 0, 469100, 4, ..., 1, 2, 3], dtype=int64)
複制
删除元素
- 直接删除
>>> print(volume)
[ 0 469100 4 ... 5923100 3468900 1715900]
>>> np.delete(volume, 1)
array([ 0, 4, 6, ..., 5923100, 3468900, 1715900], dtype=int64)
複制
- 轉換為list()來使用remove
>>> volume = volume.tolist() # Convert tolist() to use remove
>>> volume
複制
>>> volume.remove(0)
>>> print(volume)
複制
>>> print(volume.pop(2))
>>> print(volume)
複制
Matrix
在數學中,矩陣(Matrix)是一個按照長方陣列排列的複數或實數集合。由
m × n
個數
aij
排成的
m行n列
的數表稱為
m行n列
的矩陣,簡稱
m × n
矩陣。矩陣運算在科學計算中非常重要,而矩陣的基本運算包括矩陣的加法,減法,數乘,轉置,共轭和共轭轉置 。
>>> import numpy as np # 對于矩陣和線性代數
>>> import numpy.matlib
複制
報錯提示:
這裡用到
時,需要将含有
Matrix
的子包
Matrix
導入,不然會報錯。
matlib
這是因為numpy。matlib是numpy的可選子包,必須單獨導入。如果您隻導入numpy而不導入子包matlib,那麼Python将把matlib作為numpy包的屬性來查找。如果沒有導入numpy.matlib,這個屬性沒有被配置設定給numpy。
module 'numpy' has no attribute 'matlib'
>>> import yfinance as yf
>>> symbol = 'TCEHY'
>>> start = '2021-03-20'
>>> end = '2021-03-31'
>>> yf.pdr_override()
>>> dataset = yf.download(symbol,start,end)
>>> df = dataset.drop(['High', 'Low', 'Close', 'Volume'], axis=1)
>>> df.head()
複制
Open | Adj Close | |
---|---|---|
Date | ||
2021-03-19 | 80.699997 | 82.639999 |
2021-03-22 | 81.900002 | 82.769997 |
2021-03-23 | 81.650002 | 80.930000 |
2021-03-24 | 80.930000 | 76.809998 |
2021-03-25 | 77.309998 | 77.419998 |
轉換為矩陣
>>> A = np.matrix(df)
>>> A
matrix([[80.69999695, 82.63999939],
[81.90000153, 82.76999664],
[81.65000153, 80.93000031],
[80.93000031, 76.80999756],
[77.30999756, 77.41999817],
[79.44000244, 80.98000336],
[79.19000244, 78.69000244],
[78.56999969, 78.83000183]])
複制
因為
matrix
很多操作不友善,如添加修改某個元素。這裡可以先用
array
函數讀寫完畢以後,再用
matrix
函數讓它恢複矩陣類型。
轉換數組
>>> A = np.array(df)
>>> A
array([[80.69999695, 82.63999939],
[81.90000153, 82.76999664],
[81.65000153, 80.93000031],
[80.93000031, 76.80999756],
[77.30999756, 77.41999817],
[79.44000244, 80.98000336],
[79.19000244, 78.69000244],
[78.56999969, 78.83000183]])
複制
通路元素
>>> type(A)
numpy.ndarray
>>> print("A =", A)
A = [[80.69999695 82.63999939]
[81.90000153 82.76999664]
[81.65000153 80.93000031]
[80.93000031 76.80999756]
[77.30999756 77.41999817]
[79.44000244 80.98000336]
[79.19000244 78.69000244]
[78.56999969 78.83000183]]
>>> print("A[1] =", A[1]) # 第2行
A[1] = [81.90000153 82.76999664]
>>> print("A[1][2] =", A[1][1]) # 第2行的第2個元素
A[1][2] = 82.7699966430664
>>> print("A[0][-1] =", A[0][-1]) # 第1行的最後第1個元素A[0][-1] = 82.63999938964844
複制
取出元素放到清單中
>>> column = []; # 空清單
>>> for row in A:
... column.append(row[1])
>>> print("Second column =", column)
Second column = [82.63999938964844, 82.7699966430664, 80.93000030517578, 76.80999755859375,
77.41999816894531, 80.9800033569336,8.69000244140625, 78.83000183105469]
複制
arange and shape
>>> A = np.arange(4)
>>> print('A =', A)
A = [0 1 2 3]
>>> B = np.arange(12).reshape(2, 6)
>>> print('B =', B)
B = [[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
複制
矩陣的運算
>>> A = np.array(dataset['High'], dataset['Low'])
>>> B = np.array(dataset['Open'], dataset['Close'])
>>> print(A)
array([82.63999939, 82.84999847, 81.94000244, 81.16000366,
78.19000244, 80.98000336, 79.80000305, 79.41000366])
複制
- 矩陣加法
>>> C = A + B
>>> print("矩陣加法: \n", C)
矩陣加法:
[163.33999634 164.75 163.59000397 162.09000397
155.5 160.4200058 158.99000549 157.98000336]
複制
- 矩陣減法
>>> D = A - B
>>> print("矩陣減法: \n", D)
矩陣減法:
[1.94000244 0.94999695 0.29000092 0.23000336
0.88000488 1.54000092 0.61000061 0.84000397]
複制
- 兩個矩陣的乘法
>>> E = A.dot(B)
>>> print("兩矩陣點乘: \n", E)
兩矩陣點乘:
51749.67010773317
複制
- 矩陣轉置
>>> T = A.transpose()
>>> print("矩陣轉置: \n", T)
矩陣轉置:
[82.63999939 82.84999847 81.94000244 81.16000366
78.19000244 80.98000336 79.80000305 79.41000366]
複制
通路矩陣元素、行和列
- 通路一維矩陣單個元素
# 第一個元素
>>> print("A[0] =", A[0])
A[0] = 82.63999938964844
# 第三個元素
>>> print("A[2] =", A[2])
A[2] = 81.94000244140625
# 最後一個元素
>>> print("A[-1] =", A[-1])
A[-1] = 79.41000366210938
複制
- 通路多元矩陣單個元素
>>> A = np.array(dataset[['Open', 'Low', 'High', 'Close']])
>>> print("矩陣A: \n", A)
矩陣A:
[[80.69999695 80.09999847 82.63999939 82.63999939]
[81.90000153 81.62999725 82.84999847 82.76999664]
[81.65000153 80.91000366 81.94000244 80.93000031]
[80.93000031 76.59999847 81.16000366 76.80999756]
[77.30999756 76.80000305 78.19000244 77.41999817]
[79.44000244 77.81999969 80.98000336 80.98000336]
[79.19000244 78.06999969 79.80000305 78.69000244]
[78.56999969 78.02999878 79.41000366 78.83000183]]
# 第一行的第一個元素
>>> print("A[0][0] =", A[0][0])
A[0][0] = 80.69999694824219
# 第二行的第三個元素
>>> print("A[1][2] =", A[1][2])
A[1][2] = 82.8499984741211
# 最後一行的最後一個元素
>>> print("A[-1][-1] =", A[-1][-1])
A[-1][-1] = 78.83000183105469
複制
- 通路矩陣的行
# 第一行
>>> print("A[0] =", A[0])
A[0] = [80.69999695 80.09999847 82.63999939 82.63999939]
# 第三行
>>> print("A[2] =", A[2])
A[2] = [81.65000153 80.91000366 81.94000244 80.93000031]
# 最後一行
>>> print("A[-1] =", A[-1])
A[-1] = [78.56999969 78.02999878 79.41000366 78.83000183]
複制
- 通路矩陣的列
# 第一列
>>> print("A[:,0] =",A[:,0])
A[:,0] = [80.69999695 81.90000153 81.65000153 80.93000031 77.30999756 79.44000244 79.19000244 78.56999969]
# 第四列
>>> print("A[:,3] =", A[:,3])
A[:,3] = [82.63999939 82.76999664 80.93000031 76.80999756 77.41999817 80.98000336 78.69000244 78.83000183]
# 最後一列
>>> print("A[:,-1] =", A[:,-1])
A[:,-1] = [82.63999939 82.76999664 80.93000031 76.80999756 77.41999817 80.98000336 78.69000244 78.83000183]
複制
- 通路多元矩陣多個元素
# 沒有逗号相隔,預設擷取行
# 第3到第5個元素
>>> print(A[2:5])
[[81.65000153 80.91000366 81.94000244 80.93000031]
[80.93000031 76.59999847 81.16000366 76.80999756]
[77.30999756 76.80000305 78.19000244 77.41999817]]
# 第1到第3個元素
>>> print(A[:-5])
[[80.69999695 80.09999847 82.63999939 82.63999939]
[81.90000153 81.62999725 82.84999847 82.76999664]
[81.65000153 80.91000366 81.94000244 80.93000031]]
# 第6行到最後一個元素
>>> print(A[5:])
[[79.44000244 77.81999969 80.98000336 80.98000336]
[79.19000244 78.06999969 79.80000305 78.69000244]
[78.56999969 78.02999878 79.41000366 78.83000183]]
# 第1個到最後一個元素
>>> print(A[:])
[[80.69999695 80.09999847 82.63999939 82.63999939]
[81.90000153 81.62999725 82.84999847 82.76999664]
[81.65000153 80.91000366 81.94000244 80.93000031]
[80.93000031 76.59999847 81.16000366 76.80999756]
[77.30999756 76.80000305 78.19000244 77.41999817]
[79.44000244 77.81999969 80.98000336 80.98000336]
[79.19000244 78.06999969 79.80000305 78.69000244]
[78.56999969 78.02999878 79.41000366 78.83000183]]
# 反轉一個清單
>>> print(A[::-1])
[[78.56999969 78.02999878 79.41000366 78.83000183]
[79.19000244 78.06999969 79.80000305 78.69000244]
[79.44000244 77.81999969 80.98000336 80.98000336]
[77.30999756 76.80000305 78.19000244 77.41999817]
[80.93000031 76.59999847 81.16000366 76.80999756]
[81.65000153 80.91000366 81.94000244 80.93000031]
[81.90000153 81.62999725 82.84999847 82.76999664]
[80.69999695 80.09999847 82.63999939 82.63999939]]
# 前2行,前4列
>>> print(A[:2, :4])
[[80.69999695 80.09999847 82.63999939 82.63999939]
[81.90000153 81.62999725 82.84999847 82.76999664]]
# 前1行,所有列
>>> print(A[:1,])
[[80.69999695 80.09999847 82.63999939 82.63999939]]
# 所有行,第3列
>>> print(A[:,2])
[82.63999939 82.84999847 81.94000244 81.16000366 78.19000244 80.98000336 79.80000305 79.41000366]
# 所有行,第3到5列
>>> print(A[:, 2:5]) # 共4列,隻能取到第3和第4列
[[82.63999939 82.63999939]
[82.84999847 82.76999664]
[81.94000244 80.93000031]
[81.16000366 76.80999756]
[78.19000244 77.41999817]
[80.98000336 80.98000336]
[79.80000305 78.69000244]
[79.41000366 78.83000183]]
複制