目錄
NumPy套件中的資料結構
陣列(Ndarray)
#建立Ndarray
陣列可以透過array[a:b] 從陣列中提取子集,也可以在此基礎上進行批量賦值運算。
#轉換前的Ndarray是:
Matrix查询操作
Matrix增加操作
Matrix删除操作
Matrix特殊操作
Matrix转换为其它数据结构
序列(Series)
创建Series
Series查询操作
Series增加操作
Series删除操作
Series修改操作
Series特殊操作
Series转换为其它数据结构
数据框(DataFrame)
创建DataFrame
DataFrame 查询操作
DataFrame增加操作
DataFrame删除操作
DataFrame修改操作
DataFrame 特殊操作
DataFrame转换为其它数据结构
python原生数据结构
元组(Tuple)
Tuple查询操作
Tuple整体删除操作
Tuple连接和复制
Tuple其它操作
Tulpe转换为其它数据结构(举例)
列表(List)
创建列表
List查询操作
List增加操作
List删除操作
List修改操作
List其它操作
List转换为其它数据结构
集合(Set)
创建Set
Set 查询操作
Set 增加操作
Set删除操作
Set其它操作
字典(Dictionary)
创建Dict
Dict查询操作
Dict增加操作
Dict删除操作
Dict修改操作
Dict转换为其它数据结构
首頁 後端開發 Python教學 python中常用的經典資料結構有哪些

python中常用的經典資料結構有哪些

May 12, 2023 pm 02:58 PM
python

NumPy套件中的資料結構

NumPy中的資料結構,包含Ndarray、Matrix

陣列(Ndarray)

#建立Ndarray

  • 引入NumPy包,將其命名為np。在引入NumPy套件後方可使用陣列資料結構

import numpy as np
登入後複製

建立數組對象,在NumPy套件中:

  1. array() 方法可以把序列型物件轉換成陣列;

  2. arange() 方法可以產生自訂終點的一堆陣列;

  3. ones 產生值全為1的陣列;

  4. empty() 方法會產生一個給定類型和維度且不進行資料初始化的陣列;

  5. random( ) 產生隨機數組;

  6. linspace() 產生指定起止數值和步長的一維數組,例如產生一個從1到10的元素個數為5的數組

import numpy as np
array001 = np.array([1,2,3,4,5,6,7,8,9,10,11,12])
a2 = np.arange(5)
a3 = np.ones((2,2))
a4 = np.empty((2,2))
a5 = np.random.rand(4,2)
a6 = np.linspace(10,30,5)
print('\n序列型数据转化得到数组:',array001,
      '\n显示该数据结构类型:',type(array001),
      '\narange()函数创建的数组:',a2,
      '\nones()函数创建的全1数组:\n',a3,
      '\nempty()函数创建的未赋值的数组:\n',a4,
      '\nrandom()函数创建的随机数组:\n',a5,
      '\nlinespace()函数创建的随机数组:',a6)
登入後複製

序列型資料轉換得到陣列: [ 1  2  3  4  5  6  7  8  9 10 11 12] 
#顯示此資料結構類型: <class 'numpy.ndarrayclass 'numpy.ndarrayclass; '> 
arange()函數所建立的陣列: [0 1 2 3 4] 
ones()函數所建立的全1陣列:
 [[1. 1.]
 [1. 1.]] 
empty()函數所建立的未賦值的陣列:
 [[0. 0.]
 [0. 0.]] 
random()函數所建立的隨機陣列:
 [[0.39902074 0.63298526]
 [0.09231821 0.23007193]
 [0.09899536 0.83000881]## [0.09899536 0.83000881]##255創建的隨機數組: [10. 15. 20. 25 . 30.]

Ndarray查詢操作

陣列可以透過array[a:b] 從陣列中提取子集,也可以在此基礎上進行批量賦值運算。

array002 = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(&#39;\n一维数组索引:&#39;,array001[4:],
      &#39;\n二维数组索引:&#39;,array002[1:3,2:4]) #2-3行、3-4列
登入後複製

一維數組索引: [ 5  6  7  8  9 10 11 12] 
二維數組索引: [[ 7  8] [11 12]]


以下皆為多維數組中的常用屬性,其中,shape 可以傳回物件的資料結構,例如行數與列數,除了傳回一個表示數組各維度的元組,也可以透過reshape 改變數組的結構
array004 = array001.reshape(3,-1)
print(&#39;\n改变结构后的数组\n&#39;,array004,
      &#39;\n数组各个维度:&#39;,array004.shape,
      &#39;\n数组结构类型:&#39;,array004.dtype,
      &#39;\n数组数据个数:&#39;,array004.size,
      &#39;\n数组数据类型字节数:&#39;,array004.itemsize,
      &#39;\n数组维度:&#39;,array004.ndim)
登入後複製

改變結構後的陣列
 [[ 1  2  3  4]

 [ 5  6  7  8]
 [ 9 10 11 12]] 
陣列各個維度:## 數組3, 4) 
陣列結構類型: int32 
陣列資料數量: 12 
陣列資料型別位元組數: 4 
陣列維度: 2

Ndarray增加操作

    append() 函數可以增加元素或清單類型的數據,但必須注意維度需要保持一致。
  • array003 = np.append(array002,[[1],[2],[3]],axis = 1) # axis = 1 按列方向添加
    print(&#39;\n增加一列后的数组\n&#39;,array003)
    登入後複製
增加一列後的陣列
 [[ 1  2  3  4  1]

 [ 5  6  7  8  2]
 [ 9 10 1  7  8  2]
 [ 9912 3]]

Ndarray 刪除操作

  • 使用delete(x,i,axis=) 方法可以刪除陣列物件中行或列,第三個參數axis 決定了刪除的是行還是列,需要刪除的物件可以是一個數,也可以是一個元組。

  • array003 = array002.T
    print(&#39;删除单行后的数组:\n&#39;,np.delete(array003,1,axis=0)) # axis=0删除行
    array003 = array002.T
    print(&#39;批量删除后的数组:\n&#39;,np.delete(array003,(1,3),0))
    array003 = array002.T
    print(&#39;删除单列后的数组\n&#39;,np.delete(array003,1,1)) # axis=1删除列
    登入後複製
刪除單行後的陣列:

 [[ 1  5  9]
 [ 3  7 11]
 [ 4  8 12]]
批量刪除後的數組:
 [[ 1  5  9]
 [ 3  7 11]]
刪除單列後的數組
 [[ 1  9]
 [ 2 10]
 [ 3 11]
 [ 4 12]]

#Ndarray修改

  • 可以使用索引的方式進行陣列資料的批次修改。

  • array002[1:2]=0
    print(&#39;数组批量赋值\n&#39;,array002)
    array003 = array002.T
    array003[1][1] = 100
    print(&#39;修改数值后的数组\n&#39;,array003)
    登入後複製
陣列批次賦值

 [[ 1  2  3  4]
 [ 0  0  0  0]
 [ 9 10 11 12]]
修改數值後的陣列
 [[  1   0   9]
 [  2 100  10]
 [  3   0  11]
 [ # 4  3   0  11]
 [ # 4  3  12]#o# 其它操作

1.二維數組轉置。 array.T 可以得到陣列物件轉置後的結果

2.陣列的堆疊。首先新進兩個數組,之後依序使用vstack 進行縱向堆疊和使用hstack 進行橫向堆疊

arr1 = np.array([1,2,3])
arr2 = np.array([4,5,6])
print(&#39;纵向堆叠后:\n&#39;,np.vstack((arr1,arr2)),
      &#39;\n横向堆叠后:\n&#39;,np.hstack((arr1,arr2)))
登入後複製

縱向堆疊後:

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

橫向堆疊後:
 [1 2 3 4 5 6]


Ndarray轉換成其它資料結構

arr3 = np.array([[1,2,3],[4,5,6]])
print(&#39;转换前的Ndarray是:\n&#39;,arr3)
import pandas as pd
dfFromNdarray = pd.DataFrame(arr3)
print(&#39;Ndarray转化为DataFrame的结果是:\n&#39;,dfFromNdarray) #带行号和列号
登入後複製

#轉換前的Ndarray是:

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

Ndarray轉換為DataFrame的結果為:
    0  1  2
0  1  2  3
1  

arrFromDataFrame = dfFromNdarray.values
print(&#39;DataFrame转化为Ndarry的结果是:\n&#39;,arrFromDataFrame) #只提取value值
登入後複製

DataFrame轉換為Ndarry的結果是:
 [[1 2 3]
 [4 5 6]]



#矩陣( Matrix)

建立Matrix

使用mat()方法可以把其他資料結構的物件轉換為矩陣型別。
    array1 = [1,2,3]
    array2 = [6,7,8]
    array3 = [11,12,17]
    matrix = np.mat([array1,array2,array3])
    print(&#39;显示该数据结构类型:&#39;,type(matrix))
    print(matrix)
    登入後複製

    显示该数据结构类型:
    [[ 1 2 3]
    [ 6 7 8]
    [11 12 17]]

    创建随机矩阵,在numpy中包含了许多创建特殊矩阵的方法,这里使用 empty() 方法创建一个新的数据随机的矩阵

    matrix1 = np.empty((3,3))
    print(matrix1)
    登入後複製

    [[ 0.00000000e+000 0.00000000e+000 0.00000000e+000]
    [ 0.00000000e+000 0.00000000e+000 2.27270197e-321]
    [ 9.30350261e+199 1.10343781e-312 -3.38460783e+125]]

    Matrix查询操作

    • 在矩阵中有一下常用属性用于观察矩阵

    print(&#39;矩阵每维的大小:&#39;,matrix.shape)
    print(&#39;矩阵所有数据的个数:&#39;,matrix.size)
    print(&#39;矩阵每个数据的类型:&#39;,matrix.dtype)
    登入後複製

    矩阵每维的大小: (3, 3)
    矩阵所有数据的个数: 9
    矩阵每个数据的类型: int32

    Matrix增加操作

    • 矩阵合并。c_() 方法进行连接,根据参数顺序也将决定生产矩阵的结果;r_() 方法用于列连接。

    mat1 = np.mat([[1,2],[3,4]])
    mat2 = np.mat([4,5])
    matrix_r = np.c_[mat1,mat2.T]
    print(&#39;将mat2矩阵添加在原矩阵右侧\n&#39;,matrix_r)
    matrix_l = np.c_[mat2.T,mat1]
    print(&#39;将mat2矩阵添加在原矩阵左侧\n&#39;,matrix_l)
    matrix_u = np.r_[np.mat([array1]),matrix]
    print(&#39;在原矩阵上方连接矩阵\n&#39;,matrix_u)
    登入後複製

    将mat2矩阵添加在原矩阵右侧
    [[1 2 4]
    [3 4 5]]
    将mat2矩阵添加在原矩阵左侧
    [[4 1 2]
    [5 3 4]]
    在原矩阵上方连接矩阵
    [[ 1 2 3]
    [ 1 2 3]
    [ 6 7 8]
    [11 12 17]]

    Matrix删除操作

    • delete() 方法可以删除矩阵的指定行列,具体类似数组中的用法。

    matrix2 = np.delete(matrix,1,axis = 1)
    print(&#39;删除第一行后的结果\n&#39;,matrix2)
    matrix3 = np.delete(matrix,1,axis=0)
    print(&#39;删除第一列后的结果\n&#39;,matrix3)
    登入後複製

    删除第一行后的结果
    [[ 1 3]
    [ 6 8]
    [11 17]]
    删除第一列后的结果
    [[ 1 2 3]
    [11 12 17]]

    Matrix特殊操作

    1.矩阵运算,在矩阵运算中,* 被重写用于矩阵乘法,dot() 则用于计算矩阵点乘

    2.如果需要对应位置相乘,则需使用其它函数。

    mat3 = np.mat([[5,6],[7,8]])
    matrix4 = mat1*mat3
    print(&#39;矩阵乘法结果\n&#39;,matrix4)
    matrix5 = mat1.dot(mat3)
    print(&#39;矩阵点乘结果\n&#39;,matrix5)
    登入後複製

    矩阵乘法结果
    [[19 22]
    [43 50]]
    矩阵点乘结果
    [[19 22]
    [43 50]]

    矩阵常用函数。矩阵也可以使用 .T 进行转置。linalg.inv() 可以用于求逆运算,若不存在逆矩阵则报错。

    matrix6 = matrix.T
    matrix7 = np.linalg.inv(mat1)
    print(&#39;\n矩阵转置后:\n&#39;,matrix6,
          &#39;\n矩阵求逆后:\n&#39;,matrix7)
    登入後複製

    矩阵转置后:
    [[ 1 6 11]
    [ 2 7 12]
    [ 3 8 17]]
    矩阵求逆后:
    [[-2. 1. ]
    [ 1.5 -0.5]]

    求矩阵特征值(使用numpy必须是方阵)

    matrix8 = np.linalg.eig(matrix)
    print(matrix8)
    登入後複製

    (array([24.88734753, -0.8418908 , 0.95454327]), matrix([[-0.1481723 , -0.87920199, 0.10036602],
    [-0.4447565 , 0.3814255 , -0.82855015],
    [-0.88331004, 0.28551435, 0.550846 ]]))

    Matrix转换为其它数据结构

    由于结构相似,矩阵常常与列表和数组进行数据类型转换。

    print(&#39;矩阵列表转换:\n&#39;,matrix.tolist(),
          &#39;\n矩阵转数组:\n&#39;,np.array(matrix))
    登入後複製

    矩阵列表转换:
    [[1, 2, 3], [6, 7, 8], [11, 12, 17]]
    矩阵转数组:
    [[ 1 2 3]
    [ 6 7 8]
    [11 12 17]]

    Pandas中的数据结构,包括Series和DataFrame

    序列(Series)

    创建Series

    • 引入Pandas包并取别名pd

    import pandas as pd
    登入後複製
    • 首先建立一个字典,使用 Series() 方法将字典转换成序列对象,字典的key会自动成为series的index;若转换列表,则生产的序列对象会自动赋予index值。

    sdata = {&#39;Ohio&#39;:35000,&#39;Texas&#39;:71000,&#39;Oregon&#39;:16000,&#39;Utah&#39;:5000}
    s0 = pd.Series(sdata)
    print(&#39;利用字典生成的序列对象\n&#39;,s0)
    print(&#39;显示该数据结构类型:&#39;,type(s0))
    s1 = pd.Series([6,1,2,9])
    print(&#39;利用列表生成的序列对象\n&#39;,s1)
    登入後複製

    利用字典生成的序列对象
    Ohio 35000
    Texas 71000
    Oregon 16000
    Utah 5000
    dtype: int64
    显示该数据结构类型:
    利用列表生成的序列对象
    0 6
    1 1
    2 2
    3 9
    dtype: int64

    • 添加索引,通过指定index为series增加索引

    s1 = pd.Series([6,1,2,9],index=[&#39;a&#39;,&#39;b&#39;,&#39;c&#39;,&#39;d&#39;])
    print(s1)
    登入後複製

    a 6
    b 1
    c 2
    d 9
    dtype: int64

    Series查询操作

    • values 显示series中的值,index 显示索引,此外还可以按照索引值显示元素。

    print(&#39;序列的值\n&#39;,s0.values)
    print(&#39;序列的索引\n&#39;,s0.index)
    print(&#39;按照下标查找序列&#39;,s0[2])
    print(&#39;按照索引值查找元素&#39;,s0[&#39;Utah&#39;])
    print(&#39;按照下标批量查找序列\n&#39;,s0[:2])
    print(&#39;按照索引值批量查找元素\n&#39;,s0[[&#39;Ohio&#39;,&#39;Oregon&#39;]])
    登入後複製

    序列的值
    [35000 71000 16000 5000]
    序列的索引
    Index(['Ohio', 'Texas', 'Oregon', 'Utah'], dtype='object')
    按照下标查找序列 16000
    按照索引值查找元素 5000
    按照下标批量查找序列
    Ohio 35000
    Texas 71000
    dtype: int64
    按照索引值批量查找元素
    Ohio 35000
    Oregon 16000
    dtype: int64

    Series增加操作

    • append() 方法为series增加元素,index可以指定索引值。

    s2 = s1.append(pd.Series([12],index=[&#39;e&#39;]))
    print(s2)
    登入後複製

    a 6
    b 1
    c 2
    d 9
    e 12
    dtype: int64

    Series删除操作

    • 删除Series中的元素(只能通过index来删除元素)

    s3 = s1.drop(&#39;a&#39;)
    print(s3)
    登入後複製

    dtype: int64
    b 1
    c 2
    d 9

    dtype: int64

    Series修改操作

    • 序列中可以直接根据索引查找并更新元素。

    s1[&#39;a&#39;] = 4 #将s1中index为a的元素更改为4
    print(s1)
    登入後複製

    a 4
    b 1
    c 2
    d 9
    dtype: int64

    Series特殊操作

    • 序列排序。sort_values()方法可以使用series的值按照升序排序。

    print(s1.sort_values)
    登入後複製

    a 4

    b 1
    c 2
    d 9
    dtype: int64>

    • 序列求中位数。median()方法可以直接得到序列的中位数,在此之上可以进行比较等操作。

    print(s1)
    print(&#39;中位数为:&#39;+str(s1.median()))
    print(&#39;大于序列中位数的数\n&#39;,s1[s1>s1.median()])
    登入後複製

    中位数为:3.0
    大于序列中位数的数
    a 4
    d 9
    dtype: int64

    • 序列的运算,两个series之间的运算,可以加减乘除(必须保证index是一致的)。

    s2 = pd.Series([4,3,5,8],index=[&#39;a&#39;,&#39;b&#39;,&#39;c&#39;,&#39;d&#39;])
    print(s2+s1)
    登入後複製

    a 8
    b 4
    c 7
    d 17
    dtype: int64

    • 时间序列。pandas包中的data_range()方法可以生成时间序列,便于进行数据的处理。

    s3 = pd.Series([100,150,200])
    print(&#39;产生的序列是:\n&#39;,s3)
    idx = pd.date_range(start=&#39;2019-9&#39;,freq=&#39;M&#39;,periods=3)
    print(&#39;\n生成的时间序列是:\n&#39;,idx)
    s3.index = idx
    print(&#39;\n产生的时间序列是:\n&#39;,s3)
    登入後複製

    产生的序列是:
    0 100
    1 150
    2 200
    dtype: int64

    生成的时间序列是:
    DatetimeIndex(['2019-09-30', '2019-10-31', '2019-11-30'], dtype='datetime64[ns]', freq='M')

    产生的时间序列是:
    2019-09-30 100
    2019-10-31 150
    2019-11-30 200
    Freq: M, dtype: int64

    Series转换为其它数据结构

    dfFromSeries = s2.to_frame()
    print(&#39;Series转DataFrame\n&#39;,dfFromSeries)
    print(&#39;显示数据结构类型:&#39;,type(dfFromSeries))
    登入後複製

    Series转DataFrame
    0
    a 4
    b 3
    c 5
    d 8
    显示数据结构类型:

    dictFromSeries = s2.to_dict()
    print(&#39;Series转Dict\n&#39;,dictFromSeries)
    print(&#39;显示数据结构类型:&#39;,type(dictFromSeries))
    登入後複製

    Series转Dict
    {'a': 4, 'b': 3, 'c': 5, 'd': 8}
    显示数据结构类型:

    数据框(DataFrame)

    创建DataFrame

    引入pandas包,创建DataFrame对象。首先创建字典,之后使用 DataFrame() 方法创建数据框对象。通过index.name给其索引命名。最后使用 to_csv 和 to_excel 方法将其保存为csv和excel文件;也可以用列表进行创建:pd.DataFrame(data,columns,index)。

    dic1 = {&#39;name&#39;:[&#39;Tom&#39;,&#39;Lily&#39;,&#39;Cindy&#39;,&#39;Petter&#39;],&#39;no&#39;:[&#39;001&#39;,&#39;002&#39;,&#39;003&#39;,&#39;004&#39;],&#39;age&#39;:[16,16,15,16],&#39;gender&#39;:[&#39;m&#39;,&#39;f&#39;,&#39;f&#39;,&#39;m&#39;]}
    df1 = pd.DataFrame(dic1)
    print(&#39;显示该数据结构类型&#39;,type(df1))
    df1.index.name = &#39;id&#39;
    #df1.to_csv(&#39;students.csv&#39;)
    #df1.to_excel(&#39;students.xls&#39;)     !!!会报错
    print(df1)
    登入後複製

    显示该数据结构类型
    name no age gender
    id
    0 Tom 001 16 m
    1 Lily 002 16 f
    2 Cindy 003 15 f
    3 Petter 004 16 m

    DataFrame 查询操作

    • 通过 DataFrame.name 可以返回索引值为name的整列数据,而 DataFrame.loc[i] 可以返回指定行数的全部数据。除此之外也可以使用根据时间序列查找内容。

    • !!!loc[ ] 按列名称 iloc[ ] 按列号 操作

    • 获取列索引:df.cloums

    • 获取行索引:df.index

    • 获取值:df.value

    column = df1.no
    row = df1.loc[3]
    print(&#39;\n列数据索引\n&#39;,column,&#39;\n行数据索引\n&#39;,row)
    登入後複製

    列数据索引
    id
    0 001
    1 002
    2 003
    3 004
    Name: no, dtype: object
    行数据索引
    name Petter
    no 004
    age 16
    gender m
    Name: 3, dtype: object

    DataFrame增加操作

    • 使用 append() 方法增加一名同学的信息,这里根据行索引分别添加值。update() 方法可以给数据框增加列。

    print(&#39;修改前:\n&#39;,df1)
    df2 = df1.append([{&#39;name&#39;:&#39;Stark&#39;,&#39;no&#39;:&#39;005&#39;,&#39;age&#39;:15,&#39;gender&#39;:&#39;m&#39;}],ignore_index=True) #接着索引号为4,不写的话就是0
    print(&#39;增加行:\n&#39;,df2)
    df2[&#39;new_Col&#39;] = [1,2,3,4,5]
    print(&#39;增加列:\n&#39;,df2)
    登入後複製

    修改前:
    name no age gender
    id
    0 Tom 001 16 m
    1 Lily 002 16 f
    2 Cindy 003 15 f
    3 Petter 004 16 m
    增加行:
    name no age gender
    0 Tom 001 16 m
    1 Lily 002 16 f
    2 Cindy 003 15 f
    3 Petter 004 16 m
    4 Stark 005 15 m
    增加列:
    name no age gender new_Col
    0 Tom 001 16 m 1
    1 Lily 002 16 f 2
    2 Cindy 003 15 f 3
    3 Petter 004 16 m 4
    4 Stark 005 15 m 5

    DataFrame删除操作

    • 使用 drop 方法删除'address'列,还可以通过修改参数删除行。除此之外通过 del 指令可以删除指定索引值的整列数据(操作一旦进行即不可回复)。

    df3 = df1.copy()
    print(&#39;处理前的数据\n&#39;,df1)
    df3b = df3.drop([&#39;name&#39;],axis=1)
    print(&#39;删除列后的数据框\n&#39;,df3b)
    df3c = df3.drop([2])
    print(&#39;删除行后的数据框\n&#39;,df3c)
    登入後複製

    处理前的数据
    name no age gender
    id
    0 Tom 001 16 m
    1 Lily 002 16 f
    2 Cindy 003 15 f
    3 Petter 004 16 m
    删除列后的数据框
    no age gender
    id
    0 001 16 m
    1 002 16 f
    2 003 15 f
    3 004 16 m
    删除行后的数据框
    name no age gender
    id
    0 Tom 001 16 m
    1 Lily 002 16 f
    3 Petter 004 16 m

    DataFrame修改操作

    • 数据框按列合并(效果和增加列相同)

    df4 = pd.DataFrame({&#39;address&#39;:[&#39;school&#39;,&#39;home&#39;,&#39;school&#39;,&#39;school&#39;,&#39;home&#39;]})
    df5 = pd.concat([df2,df4],axis=1)
    print(&#39;合并前的df2\n&#39;,df2)
    print(&#39;合并前的df4\n&#39;,df4)
    print(&#39;合并后的df5\n&#39;,df5)
    登入後複製

    合并前的df2
    name no age gender new_Col
    0 Tom 001 16 m 1
    1 Lily 002 16 f 2
    2 Cindy 003 15 f 3
    3 Petter 004 16 m 4
    4 Stark 005 15 m 5
    合并前的df4
    address
    0 school
    1 home
    2 school
    3 school
    4 home
    合并后的df5
    name no age gender new_Col address
    0 Tom 001 16 m 1 school
    1 Lily 002 16 f 2 home
    2 Cindy 003 15 f 3 school
    3 Petter 004 16 m 4 school
    4 Stark 005 15 m 5 home

    • 数据框按行合并(效果和增加学生信息相同)

    df6 = pd.DataFrame({&#39;name&#39;:[&#39;Tony&#39;],&#39;no&#39;:[&#39;005&#39;],&#39;age&#39;:[16],&#39;gender&#39;:[&#39;m&#39;]})
    df7 = pd.concat([df1,df6],axis=0)
    print(&#39;合并前的df1\n&#39;,df1)
    print(&#39;合并前的df6\n&#39;,df6)
    print(&#39;合并后的df7\n&#39;,df7)
    登入後複製
    合并前的df1
           name   no  age gender
    id                         
    0      Tom  001   16      m
    1     Lily  002   16      f
    2    Cindy  003   15      f
    3   Petter  004   16      m
    合并前的df6
        name   no  age gender
    0  Tony  005   16      m
    合并后的df7
          name   no  age gender
    0     Tom  001   16      m
    1    Lily  002   16      f
    2   Cindy  003   15      f
    3  Petter  004   16      m
    0    Tony  005   16      m
    登入後複製

    DataFrame 特殊操作

    • 数据框的时间序列。通过 date_range 函数生成序列并加入数据中,列如创建从2019年9月21日开始的连续4天的时间序列。使用pandas包中的 read_csv() 方法读取之前保存的学生数据,更新数据后可以看到生成的时间序列已经加入到了数据框中

    i1 = pd.date_range(&#39;2019/9/21&#39;,periods=4,freq=&#39;7D&#39;)
    df10 = pd.read_csv(&#39;students.csv&#39;)
    df10.index = i1
    print(df10)
    登入後複製

    id name no age gender
    2019-09-21 0 Tom 1 16 m
    2019-09-28 1 Lily 2 16 f
    2019-10-05 2 Cindy 3 15 f
    2019-10-12 3 Petter 4 16 m

    时间序列查询

    print(&#39;\n根据时间序列索引得到的值\n&#39;,df10.loc[&#39;2019-09-21&#39;:&#39;2019-09-30&#39;,[&#39;gender&#39;,&#39;age&#39;,&#39;name&#39;]])
    登入後複製

    根据时间序列索引得到的值
    gender age name
    2019-09-21 m 16 Tom
    2019-09-28 f 16 Lily

    DataFrame转换为其它数据结构

    print(&#39;DataFrame转ndarray\n&#39;,df10.values,
          &#39;\nDataFrame转series\n&#39;,df10[&#39;gender&#39;])
    登入後複製

    DataFrame转ndarray
    [[0 'Tom' 1 16 'm']
    [1 'Lily' 2 16 'f']
    [2 'Cindy' 3 15 'f']
    [3 'Petter' 4 16 'm']]
    DataFrame转series
    2019-09-21 m
    2019-09-28 f
    2019-10-05 f
    2019-10-12 m
    Freq: 7D, Name: gender, dtype: object

    python原生数据结构

    元组(Tuple)

    1. 使用()、tuple()创建元组,元组可以为空且元素类型可以不同;

    2. 若元组中仅包含一个数字,则应该添加逗号以区别运算符号:tup=(1,);

    3. 元组一旦创建就无法对其元素进行增加、删除、修改。

    Tuple查询操作

    • 元组可以使用下标索引来访问元组中的值。

    tup1=(&#39;Google&#39;,&#39;Runoob&#39;,1997,2000)
    tup2=(1,) #创建单个数字元组
    print("tup1[0]:",tup1[0]) #访问元组中第一各元素
    print("tup2[1:5]:",tup2[1:5])
    登入後複製

    tup1[0]: Google
    tup2[1:5]: ()

    Tuple整体删除操作

    • 使用del方法可以删除指定的元组对象,但无法删除指定下标的元组元素。

    Tuple连接和复制

    • 虽然元组中的元素不允许修改,但可以对元组进行连接组合创建出一个新的元组。

    tup3=tup1+tup2
    tup4=tup2*3 #复制三份
    登入後複製

    Tuple其它操作

    1. len() 返回元组元素个数;

    2. max()/min() 返回元组元素中的最大、最小元素。

    Tulpe转换为其它数据结构(举例)

    • 元组可以转换为字符串、列表……不过单个元组无法直接转换成字典

    print("\n元组转列表:\n",list(tup1),
          "\n元组转字符串:\n",tup1.__str__())
    登入後複製

    列表(List)

    创建列表

    1. 一维列表的创建。使用[]可以创建一个列表对象,列表是一种有序的集合,可以随时添加和删除其中的元素;

    2. 多维列表的创建。尽管list默认是一维的,但可以使用[]嵌套创建多维列表。

    List查询操作

    1. list[a:b] 返回列表中第a个至第b-1个元素的列表对象;

    2. list[::a] 返回一个从列表第一个元素开始,步长为a的列表对象;

    3. list[i] 返回列表中下标为i的元素,若i为负数,则从列表尾部从后至前访问第i个元素。

    List增加操作

    • append() 可以在列表末尾增加新的项目,可以增加一个元素,也可以增加一个list对象成为多维列表。

    List删除操作

    1. remove() 函数可以删除指定值的元素,list.remove(i)会删除list对象中值为i的元素,若不存在则报错;

    2. pop() 函数可以删除指定下标的元素,默认为列表对象的最后一个元素,list.pop(i)将删除下标为i的元素。

    List修改操作

    • list[i]=x 可以直接替换列表中指定下标的元素

    List其它操作

    1. reverse() 函数可以使列表倒置;

    2. len() 函数可以返回列表的元素个数;

    3. sort() 函数可以使列表元素升序排列。

    List转换为其它数据结构

    • 列表可以便利的转换为各种数据类型;注意,单个列表无法转换为字典。

    集合(Set)

    创建Set

    • 集合不会出现重复值,所有元素按照一定的顺序排列,若元素为数字则按数字大小排列,使用set()函数创建集合会自动的拆分多个字母组成的字符串

    myset = set(&#39;aabc&#39;) #使用set()函数创建集合会自动的拆分多个字母组成的字符串
    print(myset)
    myset1 = set((&#39;hello&#39;,&#39;world&#39;))
    print(myset1)
    登入後複製

    {'a', 'c', 'b'}
    {'hello', 'world'}

    Set 查询操作

    • 使用in可以判断a是否在集合中,存在为真,反之为假。

    &#39;a&#39; in myset
    登入後複製

    Set 增加操作

    1. add() 函数可以在集合对象中加入新元素,若元素已存在,则无效果;

    2. 使用update表示添加(并非修改)是一个一个添加,并且按照顺序添加进集合。

    myset.add(&#39;ghk&#39;)
    myset.update(&#39;tyu&#39;)  #一个一个元素添加
    print(myset)
    登入後複製

    {'t', 'b', 'a', 'ghk', 'c', 'y', 'u'}

    Set删除操作

    1. remove() 函数可以将集合中的元素删除,元素不存在会报错;

    2. discard() 函数可以删除集合中指定的元素,且元素不存在不报错;

    3. pop() 函数可以随机删除集合中的一个元素(在交互模式下删除最后一个元素);

    4. clear() 函数可以清空集合。

    Set其它操作

    • len() 函数可以查询集合的长度;

    • copy() 可以复制集合中的元素并生成一个新的集合

    copy_myset=myset.copy()
    print(&#39;\nlen()返回集合的长度:&#39;,len(myset),
          &#39;\ncopy()生成的集合:&#39;,copy_myset)
    登入後複製

    len()返回集合的长度: 7
    copy()生成的集合: {'a', 'c', 'u', 't', 'ghk', 'b', 'y'}

    • 集合的运算。首先建立两个集合用于运算,在集合运算中,‘-’表示求差,‘&’表示求和,‘|’表示求并集,'^'表示两个集合的并集减去交集

    a = set(&#39;apple&#39;)
    b = set(&#39;banana&#39;)
    print (&#39;\n求差集:&#39;,a-b,
           &#39;\n求并集:&#39;,a|b,
           &#39;\n求交集:&#39;,a&b,
           &#39;\n求各自独特的:&#39;,a^b)
    登入後複製

    求差集: {'e', 'p', 'l'}
    求并集: {'p', 'n', 'l', 'a', 'b', 'e'}
    求交集: {'a'}
    求各自独特的: {'n', 'p', 'l', 'b', 'e'}

    字典(Dictionary)

    创建Dict

    • 生成一个字典和一个包含三个字典对象的字典列表。(列表中嵌套字典,students实际上是一个列表,students中的元素是字典)

    dict1={"ID":"L100","Name":"COCO"}
    students = [{&#39;name&#39;:&#39;n1&#39;,&#39;id&#39;:&#39;001&#39;},{&#39;name&#39;:&#39;n2&#39;,&#39;id&#39;:&#39;002&#39;},{&#39;name&#39;:&#39;n3&#39;,&#39;id&#39;:&#39;003&#39;}]
    print("显示该数据结构类型",type(dict1))
    print(dict1)
    登入後複製

    显示该数据结构类型
    {'ID': 'L100', 'Name': 'COCO'}

    • 使用zip方法创建字典。zip() 方法可以返回元组组成的列表,可以用于快速构建字典。

    demo_dict = dict(zip(&#39;abc&#39;,&#39;123&#39;))
    print(demo_dict)
    登入後複製

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

    Dict查询操作

    • 查找第一个学生的学号(显示出第一个字典元素id键的值);此外还可以使用get(key,default=None)方法获取指定键的值。

    print(&#39;常规查询:&#39;,students[0][&#39;id&#39;])
    print(&#39;根据键查询:&#39;,students[0].get(&#39;id&#39;))
    登入後複製

    常规查询: 001
    根据键查询: 001

    Dict增加操作

    • 添加一名学生的信息(增加行,其实是增加列表中一个元素),之后再添加一个学生信息科目(增加列,其实就是增加字典中一个键值对)

    students.append({&#39;name&#39;:&#39;n4&#39;,&#39;id&#39;:&#39;004&#39;})
    print(&#39;添加一个字典对象后:&#39;,students)
    students[0][&#39;school&#39;]=&#39;school1&#39;
    students[1][&#39;school&#39;]=&#39;school2&#39;
    students[2][&#39;school&#39;]=&#39;school2&#39;
    print(&#39;增加键值对后的字典:&#39;,students)
    登入後複製

    添加一个字典对象后: [{'name': 'n1', 'id': '001'}, {'name': 'n2', 'id': '002'}, {'name': 'n3', 'id': '003'}, {'name': 'n4', 'id': '004'}]
    增加键值对后的字典: [{'name': 'n1', 'id': '001', 'school': 'school1'}, {'name': 'n2', 'id': '002', 'school': 'school2'}, {'name': 'n3', 'id': '003', 'school': 'school2'}, {'name': 'n4', 'id': '004'}]

    Dict删除操作

    • 使用del删除一名学生的信息(删除行,其实就是删除列表中的一个元素)。再使用pop删除第一个学生的学号(删除某一行中的列,其实是删除字典中的一个键值对)

    del students[3] #删除第4行(下标为3)
    print(&#39;删除列表中的一个字典对象后:\n&#39;,students)
    students[0].pop(&#39;id&#39;)
    print(&#39;删除一个键值对后:\n&#39;,students)
    登入後複製

    删除列表中的一个字典对象后
    [{'name': 'n1', 'id': '001', 'school': 'school1'}, {'name': 'n2', 'id': '002', 'school': 'school2'}, {'name': 'n3', 'id': '003', 'school': 'school2'}]
    删除一个键值对后
    [{'name': 'n1', 'school': 'school1'}, {'name': 'n2', 'id': '002', 'school': 'school2'}, {'name': 'n3', 'id': '003', 'school': 'school2'}]

    • 删除所有学生的学号(删除某一列,其实就是删除所有字典中的一个键值对)

    for i in range(0,len(students)):
        students[i].pop(&#39;school&#39;)
    print(students)
    登入後複製

    [{'name': 'n1'}, {'name': 'n2', 'id': '002'}, {'name': 'n3', 'id': '003'}]

    Dict修改操作

    • 添加(更改)第一个学生的学号(在列表的第一个字典元素中增加/更改键值对)

    students[0].update({&#39;id&#39;:&#39;001&#39;})
    print(&#39;\n更新后的字典\n&#39;,students)
    登入後複製

    更新后的字典
    [{'name': 'n1', 'id': '001'}, {'name': 'n2', 'id': '002'}, {'name': 'n3', 'id': '003'}]

    Dict转换为其它数据结构

    • 字典的键和值可以被单独各自转换为list

    print("字典值转List:",list(demo_dict.values()))
    print("字典键转List:",list(demo_dict.keys()))
    登入後複製

    字典值转List: ['1', '2', '3']
    字典键转List: ['a', 'b', 'c']

    以上是python中常用的經典資料結構有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱門文章

    <🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
    4 週前 By 尊渡假赌尊渡假赌尊渡假赌
    北端:融合系統,解釋
    4 週前 By 尊渡假赌尊渡假赌尊渡假赌
    Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
    3 週前 By 尊渡假赌尊渡假赌尊渡假赌

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    熱門話題

    Java教學
    1676
    14
    CakePHP 教程
    1429
    52
    Laravel 教程
    1333
    25
    PHP教程
    1278
    29
    C# 教程
    1257
    24
    PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

    PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

    在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

    PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

    sublime怎麼運行代碼python sublime怎麼運行代碼python Apr 16, 2025 am 08:48 AM

    在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

    PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

    PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

    Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

    Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

    Golang vs. Python:性能和可伸縮性 Golang vs. Python:性能和可伸縮性 Apr 19, 2025 am 12:18 AM

    Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

    vscode在哪寫代碼 vscode在哪寫代碼 Apr 15, 2025 pm 09:54 PM

    在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

    notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

    在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

    See all articles