python人工智能教程——Pandas入门

关于Pandas

Pandas是基于Numpy实现的,其名字来源于两个词语——面板数据(panel data)和数据分析(data analysis)。Pandas最初被应用于金融交易领域,而在经济学中,面板数据是关于多维数据的术语,因此,从Pandas的名字就可以看出它的功能——多维数据的分析。
Pandas也的确是python中必不可少的数据分析工具,为了将来能够应对数据处理的问题,我们还是需要对它进行学习的。

Pandas常用基础操作

这里我们对文件的操作用的是kaggle的经典数据集——泰坦尼克号事件数据集。
在这里插入图片描述
第一行索引的中文意思:

单词 中文意思
PassengerId 乘客编号
Survived 是否存活
Pclass 客舱等级
Name 姓名
Sex 性别
Age 年龄
Sibsp 这名乘客在船上的同代直系亲属个数(兄弟姐妹或配偶)
Parch 这名乘客在船上的不同代直系亲属个数(父母或子女)
Ticket 船票编号
Fare 船票价格
Cabin 客舱号
Embarked 登船港口

读取文件并显示

# 导入pandas并将其命名为pd,后面就省略了
import pandas as pd


# 消去列数过多时打印出的省略号,后面就省略了
pd.set_option('display.max_columns', 1000)
pd.set_option('display.width', 1000)
pd.set_option('display.max_colwidth', 1000)

# 读取csv文件,后面就省略了
data = pd.read_csv('./train.csv')

# 显示前5print(data.head())

输出:

   PassengerId  Survived  Pclass                                                 Name     Sex   Age  SibSp  Parch            Ticket     Fare Cabin Embarked
0            1         0       3                              Braund, Mr. Owen Harris    male  22.0      1      0         A/5 21171   7.2500   NaN        S
1            2         1       1  Cumings, Mrs. John Bradley (Florence Briggs Thayer)  female  38.0      1      0          PC 17599  71.2833   C85        C
2            3         1       3                               Heikkinen, Miss. Laina  female  26.0      0      0  STON/O2. 3101282   7.9250   NaN        S
3            4         1       1         Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1      0            113803  53.1000  C123        S
4            5         0       3                             Allen, Mr. William Henry    male  35.0      0      0            373450   8.0500   NaN        S

可以看到,csv文件成功被读取并输出了前5行。
注:
如果文件是excel格式,可以使用函数pd.read_excel()来读取。
路径里的’./'是相对路径,表示当前文件夹。
head()方法是用来显示数据前5行的。

查看文件的所有列名

# 显示列名
print(data.columns)

输出:

Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'], dtype='object')

查看文件的形状

# 显示文件的形状
print(data.shape)

输出:

(891, 12)

对文件进行切片

读入文件可以直接切片,也可以通过iloc和loc方法切片。
示例:

# 三种切片方法
save_1 = data[0:3]
save_2 = data.iloc[0:3, 0:3]
save_3 = data.loc[0:3, 'PassengerId':'Name']


print('直接切片:\n', save_1)
print('iloc切片:\n', save_2)
print('loc切片:\n', save_3)

输出:

直接切片:
    PassengerId  Survived  Pclass                                                 Name     Sex   Age  SibSp  Parch            Ticket     Fare Cabin Embarked
0            1         0       3                              Braund, Mr. Owen Harris    male  22.0      1      0         A/5 21171   7.2500   NaN        S
1            2         1       1  Cumings, Mrs. John Bradley (Florence Briggs Thayer)  female  38.0      1      0          PC 17599  71.2833   C85        C
2            3         1       3                               Heikkinen, Miss. Laina  female  26.0      0      0  STON/O2. 3101282   7.9250   NaN        S
iloc切片:
    PassengerId  Survived  Pclass
0            1         0       3
1            2         1       1
2            3         1       3
loc切片:
    PassengerId  Survived  Pclass                                                 Name
0            1         0       3                              Braund, Mr. Owen Harris
1            2         1       1  Cumings, Mrs. John Bradley (Florence Briggs Thayer)
2            3         1       3                               Heikkinen, Miss. Laina
3            4         1       1         Futrelle, Mrs. Jacques Heath (Lily May Peel)

注:
可以看到直接切片和使用iloc方法切片都是左闭右开的规则。
使用loc方法我们发现,其切片并不是基于索引的,而是基于标签的。而且loc遵守的是左闭右闭的规则。

切片时也可以设置步长。
示例:

# 设置步长,步长为2
save_1 = data.iloc[0:10:2]

print(save_1)

输出:

扫描二维码关注公众号,回复: 14715471 查看本文章
   PassengerId  Survived  Pclass                                               Name     Sex   Age  SibSp  Parch            Ticket     Fare Cabin Embarked
0            1         0       3                            Braund, Mr. Owen Harris    male  22.0      1      0         A/5 21171   7.2500   NaN        S
2            3         1       3                             Heikkinen, Miss. Laina  female  26.0      0      0  STON/O2. 3101282   7.9250   NaN        S
4            5         0       3                           Allen, Mr. William Henry    male  35.0      0      0            373450   8.0500   NaN        S
6            7         0       1                            McCarthy, Mr. Timothy J    male  54.0      0      0             17463  51.8625   E46        S
8            9         1       3  Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)  female  27.0      0      2            347742  11.1333   NaN        S    1           PP 9549  16.7000    G6        S

对文件进行标签切片

直接切片标签
示例:

# 通过索引确定列
save_1 = data['Survived']

print(save_1)

输出:

0      0
1      1
2      1
3      1
4      0
      ..
886    0
887    1
888    0
889    1
890    0
Name: Survived, Length: 891, dtype: int64

标签后切片
示例:

# 通过索引确定列,然后选取行
save_1 = data['Survived'][0:5]

print(save_1)

输出:

0    0
1    1
2    1
3    1
4    0
Name: Survived, dtype: int64

对文件进行基本数学运算

乘除法

# 乘除法
save_1 = (data['Survived'] / 100)[0:5]
save_2 = (data['Survived'] * 100)[0:5]
print(save_1)
print(save_2)

输出:

0    0.00
1    0.01
2    0.01
3    0.01
4    0.00
Name: Survived, dtype: float64
0      0
1    100
2    100
3    100
4      0
Name: Survived, dtype: int64

加减法

# 加减法
save_1 = (data['Survived'] + 100)[0:5]
save_2 = (data['Survived'] - 100)[0:5]
print(save_1)
print(save_2)

输出:

0    100
1    101
2    101
3    101
4    100
Name: Survived, dtype: int64
0   -100
1    -99
2    -99
3    -99
4   -100
Name: Survived, dtype: int64

Pandas数据结构

Pandas主要有两种数据结构,Series和DataFrame。
Series就是一维数组,只是加上了索引。
DataFrame就是前例中的表格,是二维数组,有行索引和列索引。

创建示例:

# 创建Series类数据
s1 = pd.Series([1, 2, 3])
print('Series:\n', s1)

# 创建DataFrame类数据
d1 = pd.DataFrame([[1, 'a'], [2, 'b']], columns=['number', 'letter'])
print('DataFrame:\n', d1)

输出:

Series:
 0    1
1    2
2    3
dtype: int64
DataFrame:
    number letter
0       1      a
1       2      b

简单的数据合并

使用concat简单链接。

# 创建DataFrame类数据
d1 = pd.DataFrame([[1, 'a'], [2, 'b']], columns=['number', 'letter'])
d2 = pd.DataFrame([[3, 'c'], [4, 'd']], columns=['number', 'letter'])

# 纵向连接
print(pd.concat([d1, d2]))

# 横向链接
print(pd.concat([d1, d2], axis=1))

输出:

   number letter
0       1      a
1       2      b
0       3      c
1       4      d
   number letter  number letter
0       1      a       3      c
1       2      b       4      d

注:
这里axis是轴的意思,其默认值为0。在二维数组中,数据的坐标如下所示。

00 01 02 03
10 11 12 13
20 21 22 23

这里axis轴为0的意思就是指坐标第一位数字增加的方向,由此表格可看出,是竖直向下的方向。
那么axis轴为1的意思就是坐标第二位数字增加的方向,是向右的。
由此我们可以知道,对于更高维的数组,axis为0就是指最高维索引增加的方向,其他数字以此类推。

交并集合并

# 创建DataFrame类数据
d1 = pd.DataFrame([[1, 'a'], [2, 'b']], columns=['number', 'letter'])
d2 = pd.DataFrame([[3, 'c', '一'], [4, 'd', '二']], columns=['number', 'letter', '中文'])

# 默认取并集
print(pd.concat([d1, d2]))

# 取交集
print(pd.concat([d1, d2], join='inner'))

输出:

   number letter   中文
0       1      a  NaN
1       2      b  NaN
0       3      c    一
1       4      d    二
   number letter
0       1      a
1       2      b
0       3      c
1       4      d

索引重置

# 创建DataFrame类数据
d1 = pd.DataFrame([[1, 'a'], [2, 'b']], columns=['number', 'letter'])
d2 = pd.DataFrame([[3, 'c'], [4, 'd']], columns=['number', 'letter'])

# 索引重置
print(pd.concat([d1, d2], ignore_index=True))

输出:

   number letter
0       1      a
1       2      b
2       3      c
3       4      d

附加

append方法由于其完全可以被concat代替,即将被Pandas删除,这里就不介绍了。

请添加图片描述

猜你喜欢

转载自blog.csdn.net/qq_51226542/article/details/127298365