pandas基础1

pandas基础1

pandas操作技巧:tab自动补全,shift+tab 显示方法中的参数等提示信息

Pandas Basics

如何创建,读取文件的操作这里就不再提了。

Pandas Display Option and head() & tail()

显示一张表格的内容我们可以直接输入dataframe的名字也可以利用python的语法print将其打印出

我们还可以利用代码现实一些pd显示的规律。

1
2
pd.options.display.max_rows 
# 60
1
2
pd.options.display.min_rows 
# 10

默认情况下, max_rows是60,也就是说60行以下的会全部打印或展示。

min_rows是10,也就是说当数据超过了60行之后,只会展示10行,也就是头5行和尾5行

我们可以设置 pd.options.display.min_rows =20,那么,就会显示头10行和尾10行

我们也可以利用 head()和tail()方法来显示头尾,默认是5 行,但是head(10)即是显示头10行

First Data Inspection

1
titanic

我们可以利用 info()方法展示titanic数据表的基本信息,比如数据类型之列的

1
titanic.info()

利用describe()方法,可以自动统计一些信息。每列的均值、标准差、最小值、最大值、中位数、四分位数

1
titanic.describe()

此外,我们利用describe,可进行特定数据类型的统计。比如这里include = “O” 就代表所有数据类型为Object的列

1
titanic.describe(include = "O")

Python Built-in Functions & DataFrame Attributes and Methods

DataFrames and Python Built-in Functions

利用type展示数据表类型

1
2
type(titanic)
#pandas.core.frame.DataFrame

利用len展示数据表的行数

1
len(titanic)

用round对数据表中的数值进行四舍五入

1
round(titanic, 0)

利用min(数据表) 只能得到 一个列名,这是由列字符表排序得到的。

1
2
min(titanic)
# age

DataFrame Attributes

这里是一些DataFrame的属性。shape显示DataFrame的行列。titanic数据集有891行,9列

1
2
titanic.shape
# (891, 9)

size属性是行和列的积

1
2
titanic.size
# 8019

index显示数据集的索引

1
2
titanic.index
# RangeIndex(start=0, stop=891, step=1)

columns显示数据集的列

1
2
3
4
5
6
titanic.columns
'''
Index(['survived', 'pclass', 'sex', 'age', 'sibsp', 'parch', 'fare',
'embarked', 'deck'],
dtype='object')
'''

DataFrame Methods

head(n = 2) 也可以写作 head(2) ,显示头两列

1
titanic.head(n = 2)
1
2
3
4
5
6
7
8
9
10
11
titanic.min()
'''
survived 0
pclass 1
sex female
age 0.42
sibsp 0
parch 0
fare 0
dtype: object
'''

Method Chaining

https://pandas.pydata.org/pandas-docs/stable/reference/frame.html

采用链式方法可以很方便的达成一系列的功能

1
2
3
4
5
6
titanic.mean().sort_values().head(2)
'''
parch 0.381594
survived 0.383838
dtype: float64
'''

Selecting Columns

1
2
type(titanic["age"])
#pandas.core.series.Series

下面这种直接选两列的方法是错误的,会报错

1
#titanic["age", "sex"]

如果需要选择多列,需要用二维数组

1
titanic[["age", "sex"]]

单列是Series,多列则为DataFrame

1
2
type(titanic[["age", "sex"]])
# pandas.core.frame.DataFrame

但是如果二维数组中只有一列,也是Dataframe

1
type(titanic[["age"]])

Selecting one Column with “dot notation”

我们利用方括号获取一列,也可以通过点运算符来获取一列

1
titanic.age

1
2
titanic.age.equals(titanic["age"])
# Tru

Position-based Indexing and Slicing with iloc[]

我们可以利用iloc来定位和选取特定行、列的信息

1
import pandas as pd

index_col得意思就是在读数据的时候将某一列作为索引,索引可以重复地出现

1
summer = pd.read_csv("summer.csv", index_col = "Athlete")
1
summer.info()

Selecting Rows with iloc[]

我们可以利用iloc[] 来定位行。

比如iloc[0]就是第一行 iloc[-1]是最后一行

1
summer.iloc[0]
1
2
type(summer.iloc[0])
# pandas.core.series.Series
1
summer.iloc[-1]

用二维数组我们可以选择多行,这时候就组成一张表了

1
summer.iloc[[1, 2, 3]]

iloc[1:4]与summer.iloc[[1, 2, 3]]等价,就是2.3.4行iloc[4]不包含其中

1
summer.iloc[1:4]

前五行

1
summer.iloc[:5]

倒数五行

1
summer.iloc[-5:]

所有行

1
summer.iloc[:]

选择特定行组成表格

1
summer.iloc[[2, 45, 5467]]

Indexing/Slicing Rows and Columns with iloc[]

我们可以用iloc[]提取特定区域的信息

iloc[0,4]代表第一行第五列

1
2
summer.iloc[0, 4]
'HUN'

iloc[0, :3] 代表着第一行的前面3列

1
2
3
4
5
6
7
summer.iloc[0, :3]
'''
Year 1896
City Athens
Sport Aquatics
Name: HAJOS, Alfred, dtype: object
'''

iloc[0, [0, 2, 5, 7]]代表第一行的第1,3,6,8列

1
summer.iloc[0, [0, 2, 5, 7]]

iloc[34:39, [0, 2, 5, 7]] 代表第35-40行第1,3,6,8列信息

1
summer.iloc[34:39, [0, 2, 5, 7]]

Selecting Columns with iloc[]

我们同样通过iloc选择一整列的信息。

iloc[:,4]就是选择所有的行的第5列的信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
summer.iloc[:,4]
'''Athlete
HAJOS, Alfred HUN
HERSCHMANN, Otto AUT
DRIVAS, Dimitrios GRE
MALOKINIS, Ioannis GRE
CHASAPIS, Spiridon GRE
...
JANIKOWSKI, Damian POL
REZAEI, Ghasem Gholamreza IRI
TOTROV, Rustam RUS
ALEKSANYAN, Artur ARM
LIDBERG, Jimmy SWE
Name: Country, Length: 31165, dtype: object
'''
1
2
summer.iloc[:, 4].equals(summer.Country)
# True

当然我们完全没必要用上面那么麻烦的方法,直接summer[‘Country’]可以获得相同的结果

1
summer["Country"]

Label-based Indexing and Slicing with loc[]

Selecting Rows with loc[]

除了坐标定位,我们可以直接标签定位。效果是一样的,但是要使用loc[]而不是iloc[]

1
2
3
4
5
6
7
8
9
10
11
12
summer.iloc[2]
'''
Year 1896
City Athens
Sport Aquatics
Discipline Swimming
Country GRE
Gender Men
Event 100M Freestyle For Sailors
Medal Bronze
Name: DRIVAS, Dimitrios, dtype: object
'''
1
summer.loc["DRIVAS, Dimitrios"]

如果同一个运动员参加了多场比赛。那么他的数据就会形成一张Dataframe

1
summer.loc['PHELPS,Michael']

Indexing/Slicing Rows and Columns with loc[]

我们可以用标签定位数据或者截取特定区域的信息。

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
summer.loc["PHELPS, Michael", "Medal"]
'''Athlete
PHELPS, Michael Gold
PHELPS, Michael Gold
PHELPS, Michael Bronze
PHELPS, Michael Gold
PHELPS, Michael Gold
PHELPS, Michael Bronze
PHELPS, Michael Gold
PHELPS, Michael Gold
PHELPS, Michael Gold
PHELPS, Michael Gold
PHELPS, Michael Gold
PHELPS, Michael Gold
PHELPS, Michael Gold
PHELPS, Michael Gold
PHELPS, Michael Gold
PHELPS, Michael Gold
PHELPS, Michael Gold
PHELPS, Michael Silver
PHELPS, Michael Gold
PHELPS, Michael Silver
PHELPS, Michael Gold
PHELPS, Michael Gold
Name: Medal, dtype: object'''
1
summer.loc["PHELPS, Michael", ["Medal", "Event"]]

1
summer.loc[["PHELPS, Michael", "LEWIS, Carl"], ["Medal", "Event"]]

我们也可以选择所有的列,这笔数字更加直观

1
summer.loc[:, ["Medal", "Event"]]

loc[:”CHASAPIS, Spiridon”]选择前几行,一直到CHASAPIS, Spiridon所在的行为止(包含)

1
summer.loc[:"CHASAPIS, Spiridon"]

但是下面loc[:”PHELPS, Michael”]却是非法的,会报错。这是因为索引菲利普斯并不唯一,他参加过很多届奥运会。同理summer.loc[“PHELPS, Michael”:]也是错误的

1
#summer.loc[:"PHELPS, Michael"]
1
#summer.loc["PHELPS, Michael":]

选择从DRIVAS, Dimitrios到BLAKE, Arthur 关于City和Discipline两列的信息

1
summer.loc["DRIVAS, Dimitrios":"BLAKE, Arthur", "City":"Discipline"]

这样写在pandas 1.0中是非法的

1
#summer.loc[["PHELPS, Michael", "DUCK, Donald"]]
1
2
#summer.loc["PHELPS, Michael", ["Year", "Age"]]
# Passing list-likes to .loc or [] with any missing labels is no longer supported

Indexing and Slicing with reindex()

reindex()方法,可以让我们选出特定的行和列。在规定行列的时候一定要规定 index 和 columns 否则会报错

1
import pandas as pd
1
summer = pd.read_csv("summer.csv")
1
summer
1
#summer.loc[[0, 5, 30000, 40000], ["Athlete", "Medal"]]
1
summer.reindex(index = [0, 5, 30000, 40000], columns =  ["Athlete", "Medal", "Age"])

如果只选择列的话那么会默认选择所有行

1
summer = pd.read_csv("summer.csv", index_col = "Athlete")
1
summer.reindex(columns = ["Medal", "Age"])

同样的,index不能选择重复的,否则会报错

1
#summer.reindex(index = ["PHELPS, Michael"], columns = ["Medal", "Age"])

Summary and Outlook

Importing from CSV and first Inspection

1
import pandas as pd
1
summer = pd.read_csv("summer.csv", index_col = "Athlete")
1
summer
1
summer.info()

Selecting one Column

1
summer.Medal
1
summer["Medal"]

Selecting multiple Columns

1
summer[["Year", "Medal"]]
1
summer.loc[:, ["Year", "Medal"]]

Selecting positional rows

1
summer.iloc[10:21]

Selecting labeled rows

1
summer.loc["LEWIS, Carl"]

Putting it all together

1
summer[["Year", "Event", "Medal"]].loc["LEWIS, Carl"]
1
summer.loc["LEWIS, Carl"][["Year", "Event", "Medal"]]
1
summer.loc["LEWIS, Carl", ["Year", "Event", "Medal"]]

Outlook Pandas Objects

1
summer
1
type(summer)
1
summer["Year"]
1
type(summer["Year"])
1
summer.columns
1
type(summer.columns)
1
summer.index
1
type(summer.index)
1
2


Advanced Indexing and Slicing (optional)

Case 1: Getting the first 5 rows and rows 354 and 765

1
2
rows = list(range(5)) + [354, 765]
rows

[0, 1, 2, 3, 4, 354, 765]

1
summer.iloc[rows]

Case 2: Getting the first three columns and the columns “Gender” and “Event”

1
summer.columns[:3].to_list() + ["Gender", "Event"]

[‘Year’, ‘City’, ‘Sport’, ‘Gender’, ‘Event’]

1
2
col = summer.columns[:3].to_list() + ["Gender", "Event"]
col

[‘Year’, ‘City’, ‘Sport’, ‘Gender’, ‘Event’]

1
summer.loc[:, col]

image-20200801183744113

Case 3: Combining Position- and label-based Indexing: Rows at Positions 200 and 300 and columns “Athlete” and “Medal”

1
summer
1
summer.loc[[200, 300], ["Athlete", "Medal"]]

Case 4: Combining Position- and label-based Indexing: Rows “PHELPS Michael” and positional columns 4 and 6

1
summer = pd.read_csv("summer.csv", index_col = "Athlete")
1
summer
1
2
col = summer.columns[[4, 6]]
col
1
summer.loc["PHELPS, Michael", col]
1
#summer.ix["PHELPS, Michael", [4, 6]]
-------------本文结束,感谢您的阅读-------------