pandas 取 DataFrame 的子集
pandas 选择列
注: 引用库的导入和数据的导入只做一次,所有代码是在
jupyter notebook
里完成的。
import pandas as pd
titanic = pd.read_csv("data/titanic.csv")
- 只要年龄数据
ages = titanic["Age"]
ages.head()
0 22.0
1 38.0
2 26.0
3 35.0
4 35.0
Name: Age, dtype: float64
取单列的数据,直接用
[]
就可以了,每一列数据都是一个Series
,
type(ages)
pandas.core.series.Series
ages.shape
(891,)
Series
是一维的,并且只返回行
- 取年龄和性别数据
age_sex = titanic[["Age", "Sex"]]
age_sex.head()
Age Sex
0 22.0 male
1 38.0 female
2 26.0 female
3 35.0 female
4 35.0 male
取多列数据,返回的是
DataFrame
type(age_sex)
pandas.core.frame.DataFrame
age_sex.shape
(891, 2)
DataFrame
是 二维的,返回行和列
pandas 选择行
- 选择大于 35 岁的 乘客
above_35 = titanic[titanic["Age"] > 35]
above_35.head()
除了
>
, 例如==
,!=
,<
等等,都可以进行数据的过滤选择,
titanic["Age"] > 35
生成的是布尔值
的Series
。
- 选择 2舱和3舱的乘客
class_23 = titanic[titanic["Pclass"].isin([2, 3])]
class_23.head()
PassengerId Survived Pclass Name Sex \
0 1 0 3 Braund, Mr. Owen Harris male
2 3 1 3 Heikkinen, Miss. Laina female
4 5 0 3 Allen, Mr. William Henry male
5 6 0 3 Moran, Mr. James male
7 8 0 3 Palsson, Master. Gosta Leonard male
Age SibSp Parch Ticket Fare Cabin Embarked
0 22.0 1 0 A/5 21171 7.2500 NaN S
2 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
4 35.0 0 0 373450 8.0500 NaN S
5 NaN 0 0 330877 8.4583 NaN Q
7 2.0 3 1 349909 21.0750 NaN S
与条件式相似,
isin()
返回的是真,
上面的titanic[titanic["Pclass"].isin([2, 3])]
与titanic[(titanic["Pclass"] == 2) | (titanic["Pclass"] == 3)]
的效果是一样的。
结合多个条件时,每个条件应用()
包起来, 并用|
和&
连接起来。
- 选择 非空 数据
age_no_na = titanic[titanic["Age"].notna()]
age_no_na.head()
notna()
非空数据 返回真。
从 DataFrame 里选择特殊的行和列
- 选择大于 35 岁 乘客的名字
adult_names = titanic.loc[titanic["Age"] > 35, "Name"]
adult_names.head()
1 Cumings, Mrs. John Bradley (Florence Briggs Th...
6 McCarthy, Mr. Timothy J
11 Bonnell, Miss. Elizabeth
13 Andersson, Mr. Anders Johan
15 Hewlett, Mrs. (Mary D Kingcome)
Name: Name, dtype: object
- 选择
10~25
行,3~5
列的数据
titanic.iloc[10:25, 3:5]
Name Sex
10 Sandstrom, Miss. Marguerite Rut female
11 Bonnell, Miss. Elizabeth female
12 Saundercock, Mr. William Henry male
13 Andersson, Mr. Anders Johan male
14 Vestrom, Miss. Hulda Amanda Adolfina female
15 Hewlett, Mrs. (Mary D Kingcome) female
16 Rice, Master. Eugene male
17 Williams, Mr. Charles Eugene male
18 Vander Planke, Mrs. Julius (Emelia Maria Vande... female
19 Masselmani, Mrs. Fatima female
20 Fynney, Mr. Joseph J male
21 Beesley, Mr. Lawrence male
22 McGowan, Miss. Anna "Annie" female
23 Sloper, Mr. William Thompson male
24 Palsson, Miss. Torborg Danira female
取到对应的行和列后,可以对他们直接赋值。
记住
- 选择数据的子集,用
[]
- 在括号里,可以用列或者行标签,或者一系列标签,或者条件表达式
- 在使用行和列名时,使用
loc
选择特定的行和/或列。
- 在使用表中的位置时,使用
iloc
选择特定的行和/或列。
- 可以根据
loc/iloc
为选定对象赋新值。
【参考】
- 03_subset_data