【Pandas】常用基本操作

网友投稿 695 2022-05-29

学习心得

多参考pandas官方:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.values.html,如有的库已经更新了用不了就找到对应库介绍——如通过df1.values的values将dataframe转为numpy数组。

Pandas作为Python数据分析的核心包,提供了大量的数据分析函数,包括

数据处理、数据抽取、数据集成、数据计算

等基本的数据分析手段。Pandas核心数据结构包括

序列和数据框

,序列储存一维数据,而数据框则可以存储更复杂的多维数据。这里主要介绍二维数据(类似于数据表)及其相关操作。

由于Python是面向对象的语言,

序列(ps:序列和numpy的一维数组差不多)和数据框本身是一种数据对象

,因此序列和数据框有时也称为序列对象和数据框对象,它们具有自身的属性和方法。

下面主要介绍序列和数据框的创建、相关属性介绍和主要方法的使用,以及数据的访问、切片及运算。在数据读取方面,我们主要介绍了利用Pandas库中的函数读取外部数据文件的方法,包括Excel数据文件和TXT数据文件的读取方法。在函数计算方面,我们主要介绍了几个滚动计算函数,包括移动平均值、移动最大最小值、移动求和等计算。

文章目录

学习心得

1.序列操作

2.数据框操作

3.滚动计算函数

4.计算交易量的总和

Reference

1.序列操作

# -*- coding: utf-8 -*- """ Created on Fri Sep 17 09:41:28 2021 @author: 86493 """ # 序列创建及其访问 import pandas as pd import numpy as np s1 = pd.Series([1, -2, 2.3, 'hq']) # 指定列表和索引,创建个性化序列 s2 = pd.Series([1, -2, 2.3, 'hq'], index = ['a', 'b', 'c', 'd']) # 指定元组创建默认序列 s3 = pd.Series((1, -2, 2.3, 'hq')) # 指定数组创建默认序列 s4 = pd.Series(np.array([1, 2, 4, 7, 1])) # 通过字典创建序列 mydict = {'red':2000, 'blue':1000, 'yellow':500} ss = pd.Series(mydict) print(ss) print(s1) print(s1[3]) print(s2) print(s2['c']) # 2.序列属性 s1 = pd.Series([1, -2, 2.3, 'hq']) va1 = s1.values in1 = s1.index va2 = list(va1) print(va2) # 通过list转为列表 # 3.序列方法 s5 = [1, 2, 2.3, 'andy', 'liu', 'li', 'andy'] # 将列表转为序列 s5 = pd.Series(s5) s51 = s5.unique() # 去重 s52 = s5.isin([1, 'andy']) # 判断元素是否在内部 print(s52) s53 = s5.value_counts() # 统计每个元素的出现个数 print(s53) ss1 = pd.Series([10, 'hq', 60, np.nan, 20]) tt1 = ss1[~ss1.isnull()] # 取反,用逻辑数组进行索引获取数据 print(tt1) tt2 = ss1[ss1.notnull()] # 判断序列的非空值,效果同上 print(tt2) tt3 = ss1.dropna() # 清洗空值 print(tt3) # 序列切片 import pandas as pd import numpy as np s1 = pd.Series([1, -2, 2.3, 'hq']) s2 = pd.Series([1, -2, 2.3, 'hq'], index = ['a', 'b', 'c', 'd']) # 通过数组创建序列 s4 = pd.Series(np.array([1, 2, 4, 7.1])) # 注意这里面的括号和中括号 s22 = s2[['a', 'd']] print(s22) s23 = s1[0:3] print("s23:\n",s23) # 下标为0-2的元素 s24 = s1[[0, 2, 3]] # 索引为不连续的数组 print("s24:\n", s24) s25 = s4[s4>3] print("s25:\n",s25) # 序列聚合运算 lst = [i for i in range(1, 11)] s = pd.Series(lst) print("s:",s) su = s.sum() sm = s.mean() ss = s.std() smx = s.max() smi = s.min()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

2.数据框操作

另一个重要的数据对象是数据框,他的属性包括index、列名和值。由于数据框是更为广泛的一种数据组织形式,许多外部数据文件读取到Python中大部分会采用数据框的形式进行存取,比如数据库、excel和TXT文本。

# -*- coding: utf-8 -*- """ Created on Fri Sep 17 14:17:37 2021 @author: 86493 """ import pandas as pd import numpy as np data = { 'a': [2, 2, np.nan, 5, 6], 'b': ['kl', 'kl', 'kl', np.nan, 'kl'], 'c': [4, 6, 5, np.nan, 6], 'd': [7, 9, np.nan, 9, 8] } df = pd.DataFrame(data) print("初始数据为:\n",df) # 3.2 数据框属性 print('columns=', df.columns) # 列名 print('index=', df.index) #索引 print('values=\n', df.values) # 数据框的值 # 3.3 数据框方法 df1 = df.dropna() # 去掉数据集的空值 print(df1) df2 = df.fillna(0) # 所有空值元素 df3 = df.fillna('kl') df4 = df.fillna({'a':0, 'b':'kl', 'c':0, 'd':0}) # 全部列填充 df5 = df.fillna({'a':0, 'b':'kl'}) # 部分列填充 import pandas as pd data = {'a': [5, 3, 4, 1, 6], 'b': ['d', 'c', 'a', 'e', 'q'], 'c': [4, 6, 5, 5, 6] } Df = pd.DataFrame(data) # 对a列进行降序排列 Df1 = Df.sort_values('a', ascending = False) # 默认为升序,这里为降序 Df2 = Df1.sort_index(ascending = False) # 对index进行降序排列 H4 = Df2.head(4) # 显示前4行 H41 = H4.drop('b', axis = 1) # 指定轴为1,删除第b列 Df3 = pd.DataFrame({'d': [1, 2, 3, 4, 5]}) Df4 = Df.join(Df3) # 加入另一个列 import pandas as pd lst1 = ['a', 'b', 'c', 'd', 'e', 'f'] lst2 = [1, 2, 3, 4, 5, 6] lst3 = [1.4, 3.5, 2, 6, 7, 8] lst4 = [4, 5, 6, 7, 8, 9] lst5 = ['t', 5, 6, 7, 'k', 9.6] # 定义字典D,值为字符、数值混合数据 D = {'M1':lst1, 'M2':lst2, 'M3':lst3, 'M4':lst4, 'M5':lst5} # 字典G,值为纯数值数据 G = {'M1':lst2, 'M2':lst3, 'M3':lst4} D = pd.DataFrame(D) # 将字典转为数据框 D1 = D.values # 将数据框转为numpy数组 G = pd.DataFrame(G) # 将字典转为数据框 G1 = G.values # 将数据框转为numpy数组 # to_excel D.to_excel('D.xlsx') G.to_excel('G.xlsx') # 统计方法 Dt = Df4.drop('b', axis = 1) # Df1中删除b列 print(Dt) R1 = Dt.sum() # 各列求和 R2 = Dt.mean() # 各列求平均值 R3 = Dt.describe() # 各列做描述性统计 # 数据框切片 # 1.利用iloc属性切片 print(df2) c3 = df2.iloc[1:3,2] # 第1行到第3-1=2行,第2列的元素 c4 = df2.iloc[1:3, 0:2] c5 = df2.iloc[1:3, :] c6 = df2.iloc[[0, 2, 3], [1, 2]] TF = [True, False, False, True, True] c7 = df2.iloc[TF, [1]] # 2.利用loc的练习2 print("df2:\n",df2) c8 = df2.loc[df2['b'] == 'kl', :] print("c8:\n",c8) c9 = df2.loc[df2['b'] == 'kl', :].head(3) c10 = df2.loc[df2['b'] == 'kl', ['a', 'c']].head(3) c11 = df2.loc[df2['b'] == 'kl', ['a', 'c']] print("c11:\n",c11)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

【Pandas】常用基本操作

80

81

82

83

84

85

86

87

88

89

90

91

92

93

注意iloc(和正常的逻辑一样,先确定行,再确定列位置)和loc不同——数据框中的loc属性则主要是

基于列标签进行索引,即对列值进行筛选实现行定位

,再通过指定列,从而实现数据切片操作。如果取所有列,可以用冒号来表示。切片操作获得的数据还可以筛选前N行。

结果为:

初始数据为: a b c d 0 2.0 kl 4.0 7.0 1 2.0 kl 6.0 9.0 2 NaN kl 5.0 NaN 3 5.0 NaN NaN 9.0 4 6.0 kl 6.0 8.0 columns= Index(['a', 'b', 'c', 'd'], dtype='object') index= RangeIndex(start=0, stop=5, step=1) values= [[2.0 'kl' 4.0 7.0] [2.0 'kl' 6.0 9.0] [nan 'kl' 5.0 nan] [5.0 nan nan 9.0] [6.0 'kl' 6.0 8.0]] a b c d 0 2.0 kl 4.0 7.0 1 2.0 kl 6.0 9.0 4 6.0 kl 6.0 8.0 a c d 0 5 4 1 1 3 6 2 2 4 5 3 3 1 5 4 4 6 6 5 a b c d 0 2.0 kl 4.0 7.0 1 2.0 kl 6.0 9.0 2 0.0 kl 5.0 0.0 3 5.0 0 0.0 9.0 4 6.0 kl 6.0 8.0 df2: a b c d 0 2.0 kl 4.0 7.0 1 2.0 kl 6.0 9.0 2 0.0 kl 5.0 0.0 3 5.0 0 0.0 9.0 4 6.0 kl 6.0 8.0 c8: a b c d 0 2.0 kl 4.0 7.0 1 2.0 kl 6.0 9.0 2 0.0 kl 5.0 0.0 4 6.0 kl 6.0 8.0 c11: a c 0 2.0 4.0 1 2.0 6.0 2 0.0 5.0 4 6.0 6.0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

3.滚动计算函数

滚动计算函数在金融数据处理中应用非常广泛,比如移动平均价、移动平均量等计算。

# -*- coding: utf-8 -*- """ Created on Fri Sep 17 19:54:46 2021 @author: 86493 """ import pandas as pd import numpy as np L = [i for i in range(1, 15)] # 列表 T = (j for j in range(1,15)) # 元组 # 将列表L转换为数组,赋值给变量A A = np.array(L) # 将列表L转换为序列,赋值给变量S S = pd.Series(L) # 要对序列,如果对数组就会报错 avg_S = S.rolling(10).mean() # avg_A = A.rolling(10).mean() sum_S = S.rolling(10).sum() min_S = S.rolling(10).min() max_S = S.rolling(10).max()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

4.计算交易量的总和

excel里的数据如下:

# -*- coding: utf-8 -*- """ Created on Thu Sep 23 15:27:31 2021 @author: 86493 """ import pandas as pd df = pd.read_excel('股票数据.xlsx') # 保存为一个dataframe变量 df1 = df.iloc[:,2:4] Nt = df1.values # 转为numpy数组 Nt1 = df.loc[ (df['交易日期'] > 20210902) & (df['交易日期'] < 20210906)] Sum = Nt1['交易量'].sum() print(Nt1) print(Sum) # 结果如下 股票代码 交易日期 收盘价 交易量 2 600000 20210903 18.2 23212 3 600000 20210904 11.4 1231231 4 600000 20210905 15.3 1232 1255675

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

Reference

(1)Pandas速查手册中文版

(2)pandas计算行或者列的总和及apply函数的使用

Python 数据结构

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【算法与数据结构 11】递归算法,看这一篇就够了!
下一篇:回顾-AI全栈成长计划-AI进阶篇,使用Notebook物体检测-Faster R-CNN
相关文章