对于DataFrame的取值操作有索引方式,loc方法和iloc方法
假设现有DataFrame数据如下
df = pd.DataFrame([[1, None, 3, None],
[4, 8, 12, 12]],
index=list("ab"), columns=list("ABCD")
)
print(df)
A B C D
a 1 NaN 3 NaN
b 4 8.0 12 12.0
索引方法
通过对DataFrame后面加索引取值,先写列后写行,
取某个元素
df = pd.DataFrame([[1, None, 3, None],
[4, 8, 12, 12]],
index=list("ab"), columns=list("ABCD")
)
print(df)
print('''df['A"]["a"]:''',df["A"]["a"])
A B C D
a 1 NaN 3 NaN
b 4 8.0 12 12.0
df['A"]["a"]: 1
取某列
df = pd.DataFrame([[1, None, 3, None],
[4, 8, 12, 12]],
index=list("ab"), columns=list("ABCD")
)
print(df)
print(df["A"])
A B C D
a 1 NaN 3 NaN
b 4 8.0 12 12.0
a 1
b 4
Name: A, dtype: int64
取某行?暂不了解
loc方法
loc方法要求列表类型的参数取值,对于DataFrame类型列表中只能有两个元素,先行后列
取a行
df = pd.DataFrame([[1, None, 3, None],
[4, 8, 12, 12]],
index=list("ab"), columns=list("ABCD")
)
print(df.loc["a"])
A B C D
a 1 NaN 3 NaN
b 4 8.0 12 12.0
A 1.0
B NaN
C 3.0
D NaN
Name: a, dtype: float64
同取指定元素a行A列
df = pd.DataFrame([[1, None, 3, None],
[4, 8, 12, 12]],
index=list("ab"), columns=list("ABCD")
)
print(df)
print(df.loc["a","A"])
A B C D
a 1 NaN 3 NaN
b 4 8.0 12 12.0
1
可取多个元素用列表填写
如取a行A和B列
print(df.loc["a",["A","B"]])
A 1.0
B NaN
Name: a, dtype: float64
取范围列a行的A到D列
print(df.loc["a","A":"D"])
A 1.0
B NaN
C 3.0
D NaN
Name: a, dtype: float64
行操作同上
以a和b行的B到D列为例,其余不做赘述
print(df.loc["a":"b","B":"D"])
B C D
a NaN 3 NaN
b 8.0 12 12.0
参数类型可为boolList,如下取a到b行对应的布尔列
print(df.loc["a":"b",[True,True,True,False]])
A B C
a 1 NaN 3
b 4 8.0 12
iloc方法
iloc方法要求用绝对索引取值,该索引为从0开始对行列生成绝对索引。
A B C D
a 1 NaN 3 NaN
b 4 8.0 12 12.0
变成
0 1 2 3
0 1 NaN 3 NaN
1 4 8.0 12 12.0
其他与loc类似,以上面布尔列表取数据为例,这里需要注意的是用冒号取范围时,冒号对应的取值范围从闭区间[“a”,“b”] 变成了左闭右开[0,2)。
print(df.iloc[0:2,[True,True,True,False]])
A B C
a 1 NaN 3
b 4 8.0 12