学习Pandas,第 4 课

英文原文: 04 - Lesson

在这一课,我们将回归一些基本概念。 我们将使用一个比较小的数据集这样你就可以非常容易理解我尝试解释的概念。 我们将添加列,删除列,并且使用不同的方式对数据进行切片(slicing)操作。 Enjoy!

  1. # 导入需要的库
  2. import pandas as pd
  3. import sys
  1. print('Python version ' + sys.version)
  2. print('Pandas version: ' + pd.__version__)
  1. Python version 3.6.1 | packaged by conda-forge | (default, Mar 23 2017, 21:57:00)
  2. [GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)]
  3. Pandas version: 0.19.2
  1. # 我们的小数据集
  2. d = [0,1,2,3,4,5,6,7,8,9]
  3. # 创建一个 dataframe
  4. df = pd.DataFrame(d)
  5. df


















































0
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9

  1. # 我们把列名修改一下
  2. df.columns = ['Rev']
  3. df


















































Rev
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9

  1. # 我们增加一列
  2. df['NewCol'] = 5
  3. df





























































Rev NewCol
0 0 5
1 1 5
2 2 5
3 3 5
4 4 5
5 5 5
6 6 5
7 7 5
8 8 5
9 9 5

  1. # 修改一下新增加的这一列的值
  2. df['NewCol'] = df['NewCol'] + 1
  3. df





























































Rev NewCol
0 0 6
1 1 6
2 2 6
3 3 6
4 4 6
5 5 6
6 6 6
7 7 6
8 8 6
9 9 6

  1. # 我们可以删除列
  2. del df['NewCol']
  3. df


















































Rev
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9

  1. # 让我们增加几列。 译者注: 当使用 dataframe 没有的列时,dataframe 自动增加这个新列
  2. df['test'] = 3
  3. df['col'] = df['Rev']
  4. df








































































Rev test col
0 0 3 0
1 1 3 1
2 2 3 2
3 3 3 3
4 4 3 4
5 5 3 5
6 6 3 6
7 7 3 7
8 8 3 8
9 9 3 9

  1. # 如果有需要,可以改变索引(index)的名字
  2. i = ['a','b','c','d','e','f','g','h','i','j']
  3. df.index = i
  4. df








































































Rev test col
a 0 3 0
b 1 3 1
c 2 3 2
d 3 3 3
e 4 3 4
f 5 3 5
g 6 3 6
h 7 3 7
i 8 3 8
j 9 3 9

通过使用 *loc,我们可以选择 dataframe 中的部分数据。

  1. df.loc['a']
  1. Rev 0
  2. test 3
  3. col 0
  4. Name: a, dtype: int64
  1. # df.loc[起始索引(包含):终止索引(包含)]
  2. df.loc['a':'d']




































Rev test col
a 0 3 0
b 1 3 1
c 2 3 2
d 3 3 3

  1. # df.iloc[起始索引(包含):终止索引(不包含)]
  2. # 注意: .iloc 非常严格限制在整形的索引上. 从 [version 0.11.0] (http://pandas.pydata.org/pandas-docs/stable/whatsnew.html#v0-11-0-april-22-2013) 开始有这个操作。
  3. df.iloc[0:3]






























Rev test col
a 0 3 0
b 1 3 1
c 2 3 2

也可以通过列名选择一列的值。

  1. df['Rev']
  1. a 0
  2. b 1
  3. c 2
  4. d 3
  5. e 4
  6. f 5
  7. g 6
  8. h 7
  9. i 8
  10. j 9
  11. Name: Rev, dtype: int64
  1. df[['Rev', 'test']]





























































Rev test
a 0 3
b 1 3
c 2 3
d 3 3
e 4 3
f 5 3
g 6 3
h 7 3
i 8 3
j 9 3

  1. # df.ix[行范围, 列范围]
  2. df.ix[0:3,'Rev']
  1. a 0
  2. b 1
  3. c 2
  4. Name: Rev, dtype: int64
  1. df.ix[5:,'col']
  1. f 5
  2. g 6
  3. h 7
  4. i 8
  5. j 9
  6. Name: col, dtype: int64
  1. df.ix[:3,['col', 'test']] #译者注: 用一个列的list来选择多个列


























col test
a 0 3
b 1 3
c 2 3

还有一些方便的方法来选择最前或者最后的一些记录。

  1. # 选择 top-N 个记录 (默认是 5 个)
  2. df.head()










































Rev test col
a 0 3 0
b 1 3 1
c 2 3 2
d 3 3 3
e 4 3 4

  1. # 选择 bottom-N 个记录 (默认是 5 个)
  2. df.tail()










































Rev test col
f 5 3 5
g 6 3 6
h 7 3 7
i 8 3 8
j 9 3 9

This tutorial was created by HEDARO


本教程由派兰数据翻译

These tutorials are also available through an email course, please visit http://www.hedaro.com/pandas-tutorial to sign up today.