【Pandas】常用基本操作

网友投稿 678 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

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

【Pandas】常用基本操作

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
相关文章