Python数据分析库pandas ------ 初识pandas、Series对象

pandas在python中的使用:

  在python中默认用 import pandas as pd 导入pandas库,你可以用 pd.__version__ 查看你安装的版本。

  pandas中主要有两种数据结构:Series 和 DataFrame。下面我们将介绍 Series 。

  Series:一种类似于一维数组的对象,是由一组数据(一种NumPy数据类型)以及一组与之相关的数据标签(即索引)

    组成。仅有一组数据也可以产生简单的Series对象。注意:Series中的索引值是可以重复的。

  DataFrame:一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值,字符串,布尔型等),

    DataFrame 即有行索引也有列索引,可以被看做是由Series组成的字典。

  上面的表诉来源于博客:pandas---Series基础使用 

 

Series对象:

 生成Series对象

 1 import pandas as pd
 2 # print(pd.__version__)
 3 s = pd.Series([True, 1, 2, 'kl'])  # 默认添加index
 4 print("python%s的数据:\n" % type(s), s)
 5 Out[1]:
 6 python<class 'pandas.core.series.Series'>的数据:
 7  0    True
 8 1       1
 9 2       2
10 3      kl
11 dtype: object

  为Series对象添加index

1 s = pd.Series([True, 1, 2, 'kl'], index=['logical', 'num1', 'num2', 'id'])
2 print("python%s的数据:\n" % type(s), s)
3 Out[2]:
4 python<class 'pandas.core.series.Series'>的数据:
5  logical    True
6 num1          1
7 num2          2
8 id           kl
9 dtype: object

 获取元素

 1 print(s.values)
 2 print(s.index)
 3 print(s[2])
 4 print(s['num1'])
 5 print(s[:2])
 6 print(s[['num1', 'num2']])
 7 Out[3]:
 8 [True 1 2 'kl']
 9 Index(['logical', 'num1', 'num2', 'id'], dtype='object')
10 2
11 1
12 logical    True
13 num1          1
14 dtype: object
15 num1    1
16 num2    2
17 dtype: object

 为元素赋值

 1 s = pd.Series([True, 1, 2, 'kl'], index=['logical', 'num1', 'num2', 'id'])
 2 s[0] = False
 3 s['num1'] = 1.1
 4 print(s)
 5 Out[4]:
 6 logical    False
 7 num1         1.1
 8 num2           2
 9 id            kl
10 dtype: object

 用Numpy数组或其他Series对象定义新Series对象

 1 a = np.array([1, 2, 3, 4])
 2 s1 = pd.Series(a)
 3 s2 = pd.Series(s1)
 4 print("s1:\n", s1)
 5 print("s2:\n", s2)
 6 print(s1 == s2)
 7 s1[2] = 100
 8 print("s1更改后的s2:\n", s2)
 9 Out[5]:
10 s1:
11 0    1
12 1    2
13 2    3
14 3    4
15 dtype: int32
16 s2:
17 0    1
18 1    2
19 2    3
20 3    4
21 dtype: int32
22 0    True
23 1    True
24 2    True
25 3    True
26 dtype: bool
27 s1更改后的s2:
28 0      1
29 1      2
30 2    100
31 3      4
32 dtype: int32

  注意上面的s1更改之后,s2也发生了相应的变化,对比深复制与浅复制。

 筛选元素

1 a = pd.Series(np.array([1, 2, 3, 4]))
2 print(a[a < 3])
3 Out[6]:
4 [1 2]

 运算和数学函数

 1 s1 = pd.Series([6, 1, 2, 9])  # 可以加减乘除
 2 b = s1 + 2
 3 print(b)
 4 print(np.log(s1))
 5 Out[7]:
 6 0     8
 7 1     3
 8 2     4
 9 3    11
10 dtype: int64
11 0    1.791759
12 1    0.000000
13 2    0.693147
14 3    2.197225
15 dtype: float64

 Series对象的组成元素 

 1 color = pd.Series([1, 0, 2, 1, 2, 3], index=['white', 'white', 'blue', 'green', 'green', 'yellow'])
 2 print("color:\n", color)
 3 print("color.unique():\n", color.unique())
 4 print("color.value_counts():\n", color.value_counts())
 5 print("color.isin():\n", color.isin([0, 3]))
 6 print("color[color.isin([0, 3])]:\n", color[color.isin([0, 3])])
 7 Out[8]:
 8 color:
 9 white     1
10 white     0
11 blue      2
12 green     1
13 green     2
14 yellow    3
15 dtype: int64
16 color.unique():
17  [1 0 2 3]
18 color.value_counts():
19 2    2
20 1    2
21 3    1
22 0    1
23 dtype: int64
24 color.isin():
25 white     False
26 white      True
27 blue      False
28 green     False
29 green     False
30 yellow     True
31 dtype: bool
32 color[color.isin([0, 3])]:
33 white     0
34 yellow    3
35 dtype: int64

 缺失值NaN

 1 s = pd.Series([1, 2, np.nan, 6])
 2 print(s.isnull())
 3 print(s.notnull())
 4 print(s[s.notnull()])
 5 Out[9]:
 6 0    False
 7 1    False
 8 2     True
 9 3    False
10 dtype: bool
11 0     True
12 1     True
13 2    False
14 3     True
15 dtype: bool
16 0    1.0
17 1    2.0
18 3    6.0
19 dtype: float64

 Series用作字典

1 mydict = {'red':200, 'blue':100, 'yellow':50, 'orange':100}
2 myseries = pd.Series(mydict)
3 print(myseries)
4 Out[10]:
5 red       200
6 blue      100
7 yellow     50
8 orange    100
9 dtype: int64

  当然你也可以用index参数指定index。

 Series 对象之间的运算

 1 mydict0 = {'red':200, 'blue':100, 'yellow':50, 'orange':100}
 2 myseries0 = pd.Series(mydict0)
 3 print(myseries0)
 4 mydict1 = {'red':200, 'blue':100, 'yellow':50, 'orange':100, 'black':30}
 5 myseries1 = pd.Series(mydict1)
 6 print(myseries0 + myseries1)
 7 Out[11]:
 8 red       200
 9 blue      100
10 yellow     50
11 orange    100
12 dtype: int64
13 black       NaN
14 blue      200.0
15 orange    200.0
16 red       400.0
17 yellow    100.0
18 dtype: float64

  注意 myseries0 是没有black的 所以相加时默认以NaN补位。

posted @ 2018-07-31 10:23  巴蜀秀才  阅读(6750)  评论(0编辑  收藏  举报