Elaiza's Bookshop

学习pandas系列 -1-

字数统计: 637阅读时长: 2 min
2020/01/22 Share

Pandas是什么

pandas为python提供了高性能、易于使用的数据结构与数据分析工具,其能够在读写不同的数据结构(包含csv、dat、excel等文本数据格式以及hdf5等二进制格式),还能够完成时间序列分析。

Pandas的基本数据结构

Series

Series支持大部分numpy所支持的操作(本质上是对numpy数据类型的拓展),其类似于多维数组或是字典。

DataFrame

DataFrame为多种数据类型列构成的二维标签数据类型,与excel和数据库表类似。

开始上手pandas

1. 示例数据

此处练习采用的数据:

  1. openflight的机场数据airports.dat,其总共包含了7697条数据。

  2. 一个是英国的人口随时间变化的数据,年份从2000年至2018年。

2. 读取数据

pandas提供了读取不同类型数据的函数read_XXX(args…),能够读取不同的数据格式。

1
2
airports = pd.read_csv(r"path\to\data\airports.dat", header=None)
airports.info() # 查看数据信息

可以看到返回了读取的数据的信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7698 entries, 0 to 7697
Data columns (total 14 columns):
0 7698 non-null int64
1 7698 non-null object
2 7649 non-null object
3 7698 non-null object
4 7698 non-null object
5 7698 non-null object
6 7698 non-null float64
7 7698 non-null float64
8 7698 non-null int64
9 7698 non-null object
10 7698 non-null object
dtypes: float64(2), int64(2), object(10)
memory usage: 842.1+ KB

该数据没有表头,总共有7698行10列数据,数据类型有float、int和object。由于数据量较大,因此我们可以使用head()或者tail()函数查看前几条数据抑或是后几条数据。

1
airports.head(10) # 或是airports.tail(10)

获取数据基本信息

1. 这些机场属于多少个国家?

1
2
airports.country.unique().size
# => 237

2. 哪个国家拥有的机场最多?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 首先按照country分组
max_airports_num = airports.groupby("country")
# 然后进行聚合操作
max_airports_num["airport_id"].agg(np.size).sort_values(ascending=False)[0:10]
# =>
# United States 1512
# Canada 430
# Australia 334
# Brazil 264
# Russia 264
# Germany 249
# China 241
# France 217
# United Kingdom 167
# India 148
# Name: airport_id, dtype: int64

我们可以进行可视化

1
2
3
4
5
6
7
%matplotlib inline
plt.style.use("seaborn-dark")
plt.bar(data=max_airports_countries, x=max_airports_countries.index, height=max_airports_countries.values, facecolor = 'lightskyblue')
plt.xticks(rotation=45)
plt.xlabel("Country")
plt.ylabel("Airport Number")
plt.title("Those countries owns most airports")

3. 哪些国家的平均海拔最低?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
min_alt_agg = airports.groupby("country")
min_alt_agg["altitude"].agg(np.mean).sort_values(ascending=True)[0:10]
# =>
# Kiribati 4.611111
# Cayman Islands 6.333333
# Johnston Atoll 7.000000
# Maldives 8.090909
# Tuvalu 9.000000
# British Indian Ocean Territory 9.000000
# Turks and Caicos Islands 9.333333
# Seychelles 9.500000
# Marshall Islands 9.875000
# Cocos (Keeling) Islands 10.000000
# Name: altitude, dtype: float64

详细代码点击此处可获取。

CATALOG
  1. 1. Pandas是什么
  2. 2. Pandas的基本数据结构
    1. 2.1. Series
    2. 2.2. DataFrame
  3. 3. 开始上手pandas
    1. 3.1. 1. 示例数据
    2. 3.2. 2. 读取数据
    3. 3.3. 获取数据基本信息
      1. 3.3.1. 1. 这些机场属于多少个国家?
      2. 3.3.2. 2. 哪个国家拥有的机场最多?
      3. 3.3.3. 3. 哪些国家的平均海拔最低?