
参考: https://pandas.pydata.org/pandas-docs/stable/getting_started/intro_tutorials/02_read_write.html
上一篇用截图发代码没想到那么糊。。。有时间一定修改。
这篇代码问题终于解决了。
强烈安利Jupyter!

import pandas as pd
巧了,又是用到数据集:
Titanic
data
数据文件地址:https://github.com/pandas-dev/pandas/tree/master/doc/data/titanic.csv
百度网盘地址:https://pan.baidu.com/s/1q2tLL0Z2MDcOWTjnFU_aFQ 提取码:bxva
本教程使用以CSV格式存储的泰坦尼克号数据集。数据包含以下数据列:
-
PassengerId: 每位乘客的ID。
-
Survived: 此项的值分别为 0 和 1 。0 表示未生存,1 表示生存。
-
Pclass: 有3个类:1类,2类和3类。
-
Name: 乘客姓名。
-
Sex: 乘客性别。
-
Age: 乘客年龄。
-
SibSp: 表示乘客有兄弟姐妹和配偶。
-
Parch: 乘客是一个人还是有家人。
-
Ticket: 乘客的船票编号。
-
Fare: 票价。
-
Cabin: 乘客所在的客舱。
-
Embarked: 出发的类别。
titanic = pd.read_csv("titanic.csv")
titanic.head()

1. 从
DataFrame
中挑出特殊的列
我只想知道泰坦尼克号乘客的年龄。
age = titanic["Age"]
age.head()

-
为了选择单列,使用方括号
[]
,在里面填上列名。
DataFrame
里面的每个单列其实就是一个
Series
。我们可以通过检查输出的类型来验证这一点:
type(titanic["Age"])

我们也可以看看输出的形状(
shape
):
titanic["Age"].shape

DataFrame.shape
是
DataFrame
和
Series
的一种属性,其结果包含行数和列数(
nrows, ncolumns
)。在
pandas
包中,
Series
是一维的,因此只返回它的行数。
如果不是单列呢?我现在认为还需要了解一下乘客的性别。
age_sex = titanic[["Age","Sex"]]
age_sex.head()

-
若要选择多个列,你需要在括号内列表。
注意
内部方括号 定义一个包含列名的Python列表;
外部方括号
用于从
DataFrame
中选择数据,如前面的示例所示。
其返回值是一个
DataFrame
。
type(titanic[["Age","Sex"]])

titanic[["Age","Sex"]].shape

由此可见,这次选择的
DataFrame
有 891 行,2 列。
注意
DataFrame
是
二维
的!
2.从
DataFrame
中挑出特殊的行
我又对泰坦尼克号乘客的年龄感兴趣了,但我这次只要 35 岁的乘客数据。
above_35 = titanic[titanic["Age"]>35]
above_35.head()

-
我们在方括号
[]
中间使用了条件表达式,筛选出了满足条件的行。
方括号
[]
里面的条件表达式
titanic["Age"]>35
负责筛选满足“
Age
列的值大于 35 的行。
titanic["Age"]>35

条件表达式(
>
,但也可以是
==
,
!=
,
<
,
<=
,…)的输出实际上是一个与原始
DataFrame
具有相同行数的布尔值(True或False)的
Series
。这样一组(
Series
)布尔值可用于筛选
DataFrame
,方法是将其放在方括号
[]
之间。只有值为“
True
”才会被选择。
我们已经得知,泰坦尼克号数据模型由 891 行组成。让我们通过检查
DataFrame``above_35
的
shape
属性来查看满足条件的行数:
above_35.shape

我现在对位于第 2 类和第 3 类船舱(
Pclass
)的乘客感兴趣了。
class_23 = titanic[titanic["Pclass"].isin([2,3])]
class_23.head()

-
与条件表达式相类似,控制函数
isin()
对于括号里提供的列表,如果能够与该行相对应,返回True
。在方括号[]
内使用这个条件函数,以达到筛选各行的作用。在这个示例中,方括号里的条件titanic["Pclass"].isin([2, 3])
检查各行的Pclass
列是否为 2 或 3 。
上面那个示例是只要满足
Pclass
为 2 或 3 就可以了,之间是或(
|
)的关系,与下面这个示例是等价的:
class_23 = titanic[(titanic["Pclass"]==2) | (titanic["Pclass"]==3)]
class_23.head()

注意
在同时使用多个条件语句时,必须用括号
()
包括每个条件。
不能使用or/and,但需要使用or操作符
|
和and操作符
&
。
我想要挑出已知年龄的乘客数据。
age_no_na = titanic[titanic["Age"].notna()]
age_no_na.head()

-
条件控制函数
motna()
对对应值不是空值(Null
)的各行返回布尔值True
。因此,可以将它与选择方括号[]
相结合来过滤数据表。
你可能想知道事实上这里到底有什么不同,因为在前 5 行似乎看不出什么,一个很明显的区别就是
shape
属性不一样了:
age_no_na.shape

3.从
DataFrame
中挑出特殊的行和列
我现在找的样本要求大于 35 岁,但我不想要一堆乱七八糟的信息,我只想知道他们的名字。
adult_names = titanic.loc[titanic["Age"] > 35,"Name"]
adult_names.head()

-
在这种情况下,行和列的子集都是一次性完成的,仅仅使用选择方括号
[]
已经不够了。loc
/iloc
操作符必须放在选择括号[]
前面。在使用loc
/iloc
时,逗号前的部分是您想要的行,逗号后的部分是您想要选择的列。 -
* . loc [ 您想要选择的行 , 您想要选择的列 ]
当使用列名、行标签或条件表达式时,请在选择方括号
[]
前使用
loc
操作符。对于逗号前后的部分,可以使用单个标签、标签列表、标签片段、条件表达式或冒号。使用冒号
:
指定要选择
所有
行或列。
我感兴趣的是第 10 行到第 25 行和第 3 列到第 5 列之间的数据。
titanic.iloc[9:25,2:5]

-
同样,行和列的子集是一次性完成的,仅仅使用选择方括号
[]
已经不够了。可以根据行和(或)列在表中的位置进行筛选时,请在选择方括号[]
前面使用iloc
操作符。
当选择具有
loc
或
iloc
的特定行和(或)列时,可以为所选数据分配新值。例如,将名字“anonymous”分配给第三列的前 3 个元素:
titanic.iloc[0:3,3] = "anonymous"
titanic.head()


小节
-
选择数据的子集的时候需要使用方括号
[]
。 -
在这些括号中,可以使用 单个 列/行标签、列/行标签 列表 、 标签片段 、 条件表达式或冒号 。
-
在使用行名和列名时,使用
loc
选择特定的行和(或)列。 -
明确数据在表中的位置时,使用
iloc
选择特定的行和(或)列。 -
可以根据
loc
/iloc
为你的选择分配新值。