索引(index)是 Pandas 的重要工具,通过索引可以从 DataFame 中选择特定的行数和列数,这种选择数据的方式称为“子集选择”。

在 Pandas 中,索引值也被称为标签(label),它在 Jupyter 笔记本中以粗体字进行显示。索引可以加快数据访问的速度,它就好比数据的书签,通过它可以实现数据的快速查找。

创建索引

通过示例对 index 索引做进一步讲解。下面创建一个带有 index 索引的数据,并使用 read_csv() 这些读取数据:

  1. import pandas as pd
  2. data = pd.read_csv("person.csv")
  3. print(data)

输出结果:

  1. ID Name Age City Salary
  2. 0 1 Jack 28 Beijing 22000
  3. 1 2 Lida 32 Shanghai 19000
  4. 2 3 John 43 Shenzhen 12000
  5. 3 4 Helen 38 Hengshui 3500

通过列索引(标签)读取多列数据。

  1. import pandas as pd
  2. #设置"Name"为行索引
  3. data = pd.read_csv("person.csv", index_col ="Name")
  4. # 通过列标签选取多列数据
  5. a = data[["City","Salary"]]
  6. print(a)

输出结果:

  1. City Salary
  2. Name
  3. Jack Beijing 22000
  4. Lida Shanghai 19000
  5. John Shenzhen 12000
  6. Helen Hengshui 3500

再看一组简单的示例:

  1. import pandas as pd
  2. info =pd.read_csv("person.csv", index_col ="Name")
  3. #获取单列数据,或者以列表的形式传入["Salary"]
  4. a =info["Salary"]
  5. print(a)

输出结果:

  1. Salary
  2. Name
  3. Jack 22000
  4. Lida 19000
  5. John 12000
  6. Helen 3500

设置索引

set_index() 将已存在的列标签设置为 DataFrame 行索引。除了可以添加索引外,也可以替换已经存在的索引。比如您也可以把 Series 或者一个 DataFrme 设置成另一个 DataFrame 的索引。示例如下:

  1. info = pd.DataFrame({'Name': ['Parker', 'Terry', 'Smith', 'William'], 'Year': [2011, 2009, 2014, 2010],
  2. 'Leaves': [10, 15, 9, 4]})
  3. #设置Name为行索引
  4. print(info.set_index('Name'))

输出结果:

  1. Year Leaves
  2. Name
  3. Parker 2011 10
  4. Terry 2009 15
  5. Smith 2014 9
  6. William 2010 4

重置索引

您可以使用 reset_index() 来恢复初始行索引,示例如下:

  1. import pandas as pd
  2. import numpy as np
  3. info = pd.DataFrame([('William', 'C'),
  4. ('Smith', 'Java'),
  5. ('Parker', 'Python'),
  6. ('Phill', np.nan)],
  7. index=[1, 2, 3, 4],
  8. columns=('name', 'Language'))
  9. print(info)
  10. print(info.reset_index())

输出结果:

  1. 重置前:
  2. name Language
  3. 1 William C
  4. 2 Smith Java
  5. 3 Parker Python
  6. 4 Phill NaN
  7. 重置后:
  8. index name Language
  9. 0 1 William C
  10. 1 2 Smith Java
  11. 2 3 Parker Python
  12. 3 4 Phill NaN

---------------------------------------------------------------------------------------

分层索引(Multiple Index)是 Pandas 中非常重要的索引类型,它指的是在一个轴上拥有多个(即两个以上)索引层数,这使得我们可以用低维度的结构来处理更高维的数据。比如,当想要处理三维及以上的高维数据时,就需要用到分层索引。

分层索引的目的是用低维度的结构(Series 或者 DataFrame)更好地处理高维数据。通过分层索引,我们可以像处理二维数据一样,处理三维及以上的数据。分层索引的存在使得分析高维数据变得简单,让抽象的高维数据变得容易理解,同时它比废弃的 Panel 结构更容易使用。

Pandas 可以通过 MultiIndex() 方法来创建分层索引对象,该对象本质上是一个元组序列,序列中每一个元组都是唯一的。下面介绍几种创建分层索引的方式。

创建分层索引

1) 直接创建

通过 MultiIndex() 的levels参数能够直接创建分层索引,示例如下:

  1. import pandas as pd
  2. import numpy as np
  3. #为leves传递一个1行5列的二维数组
  4. df=pd.MultiIndex(levels=[[np.nan, 2, pd.NaT, None, 5]], codes=[[4, -1, 1, 2, 3, 4]])
  5. print(df.levels)
  6. print(df)

输出结果:

  1. [[nan, 2, NaT, None, 5]]
  2.  
  3. MultiIndex([( 5,),
  4. (nan,),
  5. ( 2,),
  6. (nan,),
  7. (nan,),
  8. ( 5,)],
  9. )

上述代码中,levels参数用来创建层级索引,这里只有一层,该层的索引值分别是 np.nan, 2, NaT, None, 5;codes表示按参数值对层级索引值排序(与 levels 中的值相对应),也就说 codes 中数值是 leves 序列的下标索引。需要注意,这里的 -1 代表 NaN。

2) 从元组创建

通过 from_tuples() 实现从元组创建分层索引。

  1. #创建元组序列
  2. arrays = [['it', 'it', 'of', 'of', 'for', 'for', 'then', 'then'],
  3. ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
  4. #使用zip()函数创建元组
  5. tuples = list(zip(*arrays))
  6. print(tuples)

输出结果如下:

  1. [('it', 'one'),
  2. ('it', 'two'),
  3. ('of', 'one'),
  4. ('of', 'two'),
  5. ('for', 'one'),
  6. ('for', 'two'),
  7. ('then', 'one'),
  8. ('then', 'two')]

然后使用 tuples 创建分层索引,如下所示:

  1. import pandas as pd
  2. #创建了两层索引,并使用names对它们命名
  3. index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
  4. print(index)

输出结果:

  1. MultiIndex([( 'it', 'one'),
  2. ( 'it', 'two'),
  3. ( 'of', 'one'),
  4. ( 'of', 'two'),
  5. ( 'for', 'one'),
  6. ( 'for', 'two'),
  7. ('then', 'one'),
  8. ('then', 'two')],
  9. names=['first', 'second'])

3) 从DataFrame对象创建

通过 from_frame() 创建分层索引,示例如下:

  1. #首先创建一个 DataFrame。
  2. import pandas as pd
  3. df = pd.DataFrame([['bar', 'one'], ['bar', 'two'],
  4. ['foo', 'one'], ['foo', 'two']],
  5. columns=['first', 'second'])
  6. #然后使用 from_frame()创建分层索引。
  7. index = pd.MultiIndex.from_frame(df)
  8. #将index应用于Series
  9. s=pd.Series(np.random.randn(4), index=index)
  10. print(s)

输出结果:

  1. first second
  2. bar one 1.151928
  3. two -0.694435
  4. foo one -1.701611
  5. two -0.486157
  6. dtype: float64

4) 笛卡尔积创建

笛卡尔积(又称直积)是数学运算的一种方式,下面使用 from_product() 笛卡尔积创建分层索引。

  1. import pandas as pd
  2. #构建数据
  3. numbers = [0, 1, 2]
  4. language = ['Python', 'Java']
  5. #经过笛卡尔积处理后会得到6中组合方式
  6. index = pd.MultiIndex.from_product([numbers, language],names=['number', 'language'])
  7. #将分层索引对象应用于Series
  8. dk_er=pd.Series(np.random.randn(6), index=index)
  9. print(dk_er)

输出结果:

  1. number language
  2. 0 Python -0.319739
  3. Java 1.599170
  4. 1 Python -0.010520
  5. Java 0.262068
  6. 2 Python -0.124177
  7. Java 0.315120
  8. dtype: float64

5) 数组创建分层索引

通过 from_array() 方法,同样可以创建分层索引。示例如下:

  1. import pandas as pd
  2. df=pd.MultiIndex.from_arrays([['a', 'a', 'b', 'b'],[1, 2, 1, 2]])
  3. df

输出结果:

  1. MultiIndex([('a', 1),
  2. ('a', 2),
  3. ('b', 1),
  4. ('b', 2)],
  5. )

应用分层索引

下面示例讲解了如何在 DataFrame 中应用分层索引。

  1. import pandas as pd
  2. import numpy as np
  3. #创建一个数组
  4. arrays = [[0, 0, 1, 1], ['A', 'B', 'A', 'B']]
  5. #从数组创建
  6. index=pd.MultiIndex.from_arrays(arrays, names=('number', 'letter'))
  7. print(index)

输出结果

  1. MultiIndex([(0, 'A'),
  2. (0, 'B'),
  3. (1, 'A'),
  4. (1, 'B')],
  5. names=['number', 'letter'])

上述示例中,第一层为 number,该层有 0、1 两个元素,第二层为 letter,有两个字母 A 和 B。

下面把已经创建的分层索引应用到 DataFrame 中,如下所示:

  1. import pandas as pd
  2. import numpy as np
  3. #创建一个数组
  4. arrays = [[0, 0, 1, 1], ['A', 'B', 'A', 'B']]
  5. index=pd.MultiIndex.from_arrays(arrays, names=('number', 'letter'))
  6. #在行索引位置应用分层索引
  7. df=pd.DataFrame([{'a':11, 'b':22}], index=index)
  8. print(df)

输出结果:

  1. a b
  2. number letter
  3. 0 A 11 22
  4. B 11 22
  5. 1 A 11 22
  6. B 11 22

通过 set_index() 可以将 DataFrame 的已有列的标索设置为 index 行索引,示例如下:

  1. import pandas as pd
  2. df= pd.DataFrame({'a': range(5), 'b': range(5, 0, -1),
  3. 'c': ['one', 'one', 'one', 'two', 'two'],
  4. 'd': [0, 1, 2, 0, 1]})
  5. print(df)
  6. df1=df.set_index(['a','d'],drop=False)
  7. print(df1)
  8. df1=df.set_index(['a','d'],drop=False,append=Ture)
  9. print(df2)

输出结果:

  1. 转换前:
  2. a b c d
  3. 0 0 5 one 0
  4. 1 1 4 one 1
  5. 2 2 3 one 2
  6. 3 3 2 two 0
  7. 4 4 1 two 1
  8. 转换后:
  9. a b c d
  10. a d
  11. 0 0 0 5 one 0
  12. 1 1 1 4 one 1
  13. 2 2 2 3 one 2
  14. 3 0 3 2 two 0
  15. 4 1 4 1 two 1
  16. append参数:
  17.      a  b    c  d
  18. a d            
  19. 0 0 0  0  5  one  0
  20. 1 1 1  1  4  one  1
  21. 2 2 2  2  3  one  2
  22. 3 3 0  3  2  two  0
  23. 4 4 1  4  1  two  1

通过 set_index() 将列索引转换为了分层行索引,其中 drop=False 表示更新索引的同时,不删除 a、d 列;同时,该函数还提供了一个 append = Ture 参数表示不添加默认的整数索引值(0到4)

分层索引切片取值

下面讲解分层索引切片取值操作,示例如下:

1) 分层行索引操作

  1. import pandas as pd
  2. #构建多层索引
  3. tuple = [('湖人',2008),('步行者',2008),
  4. ('湖人',2007),('凯尔特人',2007),
  5. ('篮网',2007),('热火',2008)]
  6. salary = [10000,20000,11000,30000,19000,22000]
  7. #其次应用于DataFrame
  8. index = pd.MultiIndex.from_tuples(tuple)
  9. s = pd.Series(salary, index=index)
  10. print(s)
  11. #切片取值
  12. print(s['湖人',2007])
  13. print(s['湖人'])
  14. print(s[:,2008])
  15. #比较value
  16. print(s[s<=20000])

输出结果:

  1. 湖人 2008 10000
  2. 步行者 2008 20000
  3. 湖人 2007 11000
  4. 凯尔特人 2007 30000
  5. 篮网 2007 19000
  6. 热火 2008 22000
  7. dtype: int64
  8.  
  9. 湖人队2007年工资:
  10. 11000
  11.  
  12. 湖人队的工资:
  13. 2008 10000
  14. 2007 11000
  15. dtype: int64
  16.  
  17. 2008年所有队伍工资:
  18. 湖人 10000
  19. 步行者 20000
  20. 热火 22000
  21. dtype: int64
  22.  
  23. 小于等于20000的年份和队伍:
  24. 湖人 2008 10000
  25. 步行者 2008 20000
  26. 湖人 2007 11000
  27. 篮网 2007 19000
  28. dtype: int64

2) 行、列多层索引操作

下面看一种更加复杂的情况,就是行、列同时存在多层索引时候,应该如何通过切片取值。示例如下:

  1. df = pd.DataFrame(np.arange(1,13).reshape((4, 3)),
  2. index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]],
  3. columns=[['Jack', 'Jack', 'Helen'],
  4. ['Python', 'Java', 'Python']])
  5. #选择同一层级的索引,切记不要写成['Jack','Helen']
  6. print(df[['Jack','Helen']])
  7. #在不同层级分别选择索引
  8. print(df['Jack','Python'])
  9. #iloc整数索引
  10. print(df.iloc[:3,:2])
  11. #loc列标签索引
  12. print(df.loc[:,('Helen','Python')])

输出结果:

  1. Jack Helen
  2. Python Java Python
  3. a 1 1 2 3
  4. 2 4 5 6
  5. b 1 7 8 9
  6. 2 10 11 12
  7.  
  8. a 1 1
  9. 2 4
  10. b 1 7
  11. 2 10
  12. Name: (Jack, Python), dtype: int32
  13.  
  14. Jack
  15. Python Java
  16. a 1 1 2
  17. 2 4 5
  18. b 1 7 8
  19.  
  20. a 1 3
  21. 2 6
  22. b 1 9
  23. 2 12
  24. Name: (Helen, Python), dtype: int32

聚合函数应用

通过给level传递参数值,您可以指定在哪个层上进行聚合操作,比如求和、求均值等。示例如下:

  1. import pandas as pd
  2. df = pd.DataFrame(np.arange(1,13).reshape((4, 3)),
  3. index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]],
  4. columns=[['Jack', 'Jack', 'Helen'],
  5. ['Python', 'Java', 'Python']])
  6. #第一步,给行列层级起名字
  7. df.index.names=['key1','key2']
  8. df.columns.names=['name','course']
  9. print(df.sum(level='key2'))
  10. print(df.mean(level="course",axis=1))

输出结果:

  1. #对key2层1/2对应的元素值求和
  2. name Jack Helen
  3. course Python Java Python
  4. key2
  5. 1 8 10 12
  6. 2 14 16 18
  7.  
  8. #axis=1沿着水平方向求均值
  9. course Python Java
  10. key1 key2
  11. a 1 2 2
  12. 2 5 5
  13. b 1 8 8
  14. 2 11 11

在数据分析的过程中,我们把大部分时间都花费在数据的准备和预处理上,Pandas 作为一个灵活、高效的数据预处理工具,提供了诸多数据处理的方法,分层索引(Multiple Index)就是其中之一,分层索引(或多层索引)是 Pandas 的基本特性,它能够增强 Pands 数据预处理的能力。

对于 Series 结构来说,通过给index参数传递一个二维数组就可以创建一个具有两层索引的 MultiIndex 对象,示例如下:

  1. import pandas as pd
  2. info = pd.Series([11, 14, 17, 24, 19, 32, 34, 27],
  3. index = [['x', 'x', 'x', 'x', 'y', 'y', 'y', 'y'],
  4. ['obj1', 'obj2', 'obj3', 'obj4', 'obj1', 'obj2', 'obj3', 'obj4']])
  5. print(info)

输出结果:

  1. x obj1 11
  2. obj2 14
  3. obj3 17
  4. obj4 24
  5. y obj1 19
  6. obj2 32
  7. obj3 34
  8. obj4 27
  9. dtype: int64

上述示例,创建了两个层级的索引,即 (x, y) 和 (obj1,…, obj4),您可以使用 'index' 命令查看索引。

info.index

输出结果:

  1. MultiIndex([('x', 'obj1'),
  2. ('x', 'obj2'),
  3. ('x', 'obj3'),
  4. ('x', 'obj4'),
  5. ('y', 'obj1'),
  6. ('y', 'obj2'),
  7. ('y', 'obj3'),
  8. ('y', 'obj4')],
  9. )

此外,您还可以基于内部索引层(也就是'obj')来选择数据。如下所示:

info [:,'obj2' ]

输出结果:

  1. x 14
  2. y 32
  3. dtype: int64

局部索引

局部索引可以理解为:从分层索引中选择特定索引层的一种方法。比如在下列数据中,选择所有'y'索引指定的数据,示例如下:

  1. import pandas as pd
  2. info = pd.Series([11, 14, 17, 24, 19, 32, 34, 27],
  3. index = [['x', 'x', 'x', 'x', 'y', 'y', 'y', 'y'],
  4. ['obj1', 'obj2', 'obj3', 'obj4', 'obj1', 'obj2', 'obj3', 'obj4']])
  5. info['y']

输出结果:

  1. obj1 19
  2. obj2 32
  3. obj3 34
  4. obj4 27
  5. dtype: int64

当然您也可以基于内层索引选择数据。

行索引层转换为列索引

unstack() 用来将行索引转变成列索引,相当于转置操作。通过 unstack() 可以将 Series(一维序列)转变为 DataFrame(二维序列)。示例如下:

  1. import pandas as pd
  2. info = pd.Series([11, 14, 17, 24, 19, 32, 34, 27],
  3. index = [['x', 'x', 'x', 'x', 'y', 'y', 'y', 'y'],
  4. ['obj1', 'obj2', 'obj3', 'obj4', 'obj1', 'obj2', 'obj3', 'obj4']])
  5. #行索引标签默认是最外层的 x, y
  6. #0代表第一层索引,而1代表第二层
  7. print(info.unstack(0))

输出结果:

  1. x y
  2. obj1 11 19
  3. obj2 14 32
  4. obj3 17 34
  5. obj4 24 27

从示例可以看出,unstack(0) 表示选择第一层索引作为列,unstack(1) 表示选择第二层,如下所示:

  1. import pandas as pd
  2. info = pd.Series([11, 14, 17, 24, 19, 32, 34, 27],
  3. index = [['x', 'x', 'x', 'x', 'y', 'y', 'y', 'y'],
  4. ['obj1', 'obj2', 'obj3', 'obj4', 'obj1', 'obj2', 'obj3', 'obj4']])
  5. print(info.unstack(1))

输出结果:

  1. obj1 obj2 obj3 obj4
  2. x 11 14 17 24
  3. y 19 32 34 27

列索引实现分层

我们知道,列索引存在于 DataFrame 结构中,下面创建一个 DataFrame 来演示列索引如何实现分层。

  1. import numpy as np
  2. info = pd.DataFrame(np.arange(12).reshape(4, 3),
  3. index = [['a', 'a', 'b', 'b'], ['one', 'two', 'three', 'four']],
  4. columns = [['num1', 'num2', 'num3'], ['x', 'y', 'x']] )
  5. print(info)

输出结果:

  1. num1 num2 num3
  2. x y x
  3. a one 0 1 2
  4. two 3 4 5
  5. b three 6 7 8
  6. four 9 10 11

查看所有列索引:

info.columns

输出结果:

  1. MultiIndex([('num1', 'x'),
  2. ('num2', 'y'),
  3. ('num3', 'x')],)

交换层和层排序

1) 交换层

通过 swaplevel() 方法轻松地实现索引层交换,示例如下:

  1. import pandas as pd
  2. frame = pd.DataFrame(np.arange(12).reshape((4, 3)),
  3. index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]],
  4. columns=[['Ohio', 'Ohio', 'Colorado'],
  5. ['Green', 'Red', 'Green']])
  6. #设置index的levels名称
  7. frame.index.names = ['key1', 'key2']
  8. #设置columns的levels名称
  9. frame.columns.names = ['state','color']
  10. #交换key1层与key层
  11. frame.swaplevel('key1','key2')

输出结果:

  1. state Ohio Colorado
  2. color Green Red Green
  3. key2 key1
  4. 1 a 0 1 2
  5. 2 a 3 4 5
  6. 1 b 6 7 8
  7. 2 b 9 10 11

2) 层排序

通过 sort_index() 的level参数实现对层的排序。下面示例,按“key1”的字母顺序重新排序。

  1. import pandas as pd
  2. frame = pd.DataFrame(np.arange(12).reshape((4, 3)),
  3. index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]],
  4. columns=[['Ohio', 'Ohio', 'Colorado'],
  5. ['Green', 'Red', 'Green']])
  6. #设置index的levels的名称,key1 与 key2分别对应不同的层
  7. frame.index.names = ['key1', 'key2']
  8. #设置columns的levels的名称
  9. frame.columns.names = ['state','color']
  10. print(frame.sort_index(level='key1'))

输出结果:

  1. state Ohio Colorado
  2. color Green Red Green
  3. key1 key2
  4. a 1 0 1 2
  5. 2 3 4 5
  6. b 1 6 7 8
  7. 2 9 10 11

pandas之索引操作的更多相关文章

  1. pandas索引操作

    Pandas的索引操作 索引对象Index 1. Series和DataFrame中的索引都是Index对象 示例代码: print(type(ser_obj.index)) print(type(d ...

  2. Pandas的基础操作(一)——矩阵表的创建及其属性

    Pandas的基础操作(一)——矩阵表的创建及其属性 (注:记得在文件开头导入import numpy as np以及import pandas as pd) import pandas as pd ...

  3. pandas之数据处理操作

    1.pandas对缺失数据的处理 我们的数据缺失通常有两种情况: 1.一种就是空,None等,在pandas是NaN(和np.nan一样) 解决方法: 判断数据是否为NaN:pd.isnull(df) ...

  4. python数据结构:pandas(2)数据操作

    一.Pandas的数据操作 0.DataFrame的数据结构 1.Series索引操作 (0)Series class Series(base.IndexOpsMixin, generic.NDFra ...

  5. Pandas的拼接操作

    pandas的拼接操作 pandas的拼接分为两种: 级联:pd.concat, pd.append 合并:pd.merge, pd.join import pandas as pd import n ...

  6. (三)pandas 层次化索引

    pandas层次化索引 1. 创建多层行索引 1) 隐式构造 最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组 Series也可以创建多层索引 import numpy ...

  7. (四)pandas的拼接操作

    pandas的拼接操作 #重点 pandas的拼接分为两种: 级联:pd.concat, pd.append 合并:pd.merge, pd.join 0. 回顾numpy的级联 import num ...

  8. 数据分析05 /pandas的高级操作

    数据分析05 /pandas的高级操作 目录 数据分析05 /pandas的高级操作 1. 替换操作 2. 映射操作 3. 运算工具 4. 映射索引 / 更改之前索引 5. 排序实现的随机抽样/打乱表 ...

  9. Mongodb学习笔记三(Mongodb索引操作及性能测试)

    第三章 索引操作及性能测试 索引在大数据下的重要性就不多说了 下面测试中用到了mongodb的一个客户端工具Robomongo,大家可以在网上选择下载.官网下载地址:http://www.robomo ...

  10. Elasticsearch-PHP 索引操作(转)

    索引操作 本节通过客户端来介绍一下索引API的各种操作.索引操作包含任何管理索引本身(例如,创建索引,删除索引,更改映射等等). 我们通过一些常见的操作的代码片段来介绍,然后在表格中列出剩下的方法.R ...

随机推荐

  1. Core_DataCollect BacNet说明

    /* * BACnet_AI 0 模拟输入.定义一个标准对象,其属性表示模拟输入的外部可见特征. BACnet_AO 1 模拟输出.定义一个标准对象,其属性表示模拟输出的外部可见特征. BACnet_ ...

  2. 归纳了一下AD的快捷键

    1:shift+s 键 切换单层显示 2:q     英寸和毫米 尺寸切换3:D+R进入布线规则设置.其中 Clearance 是设置最小安全线间距,覆铜时候间距的.比较常用4:CTRL+鼠标单击某个 ...

  3. vue使用keepalive缓存上级页面

    参考: vue单页应用前进刷新后退不刷新方案探讨 vue,vue-router实现浏览器返回不刷新页面 vue 怎么处理当this.$router.go(-1)时,判断返回指定页面设置指定页面的kee ...

  4. 使用npm包安装vant组件

  5. redhat安装mysql8.0

    redhat 安装mysql 8.0 * 看mysql官方文档 * 安装epel源 * 安装mysql源 参考文章 redhat7通过yum安装mysql5.7.17教程:https://www.jb ...

  6. docker安装配置gitlab时的常用命令整理

    1.下载安装dockerapt install docker.io2.服务启动service docker start 3.拉取gitlabdocker pull beginor/gitlab-ce: ...

  7. C#重点语法——反射

    ------------恢复内容开始------------ 一.含义 反射是指访问,检测或修改程序代码本身状态或行为的一种技术. 举例: 官方代码继承了IReflect ------------恢复 ...

  8. SQL语句用法总结

    use quan56_goods; 使用数据库 show tables; 展示数据表 模糊查询 select * from tb_brand where name like '%林%'; 顺序 书写顺 ...

  9. Java8-聚合操作

    Java聚合操作(Aggregate Operations)是对一堆数据进行处理的新的操作方法,我们知道,如果想对一堆数据进行处理,比如一个List对象中的数据进行处理,传统的操作就是遍历List数据 ...

  10. 关于前端JS的一些常用方法和知识

    关于前端数据存储目前只解释有三种:cookie.localStorage.sessionStorage cookie解释:只针对当前session(会话)有效,关闭标签页即失效使用: 1 var ck ...