大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
stackoverflow原文:pandas iloc vs ix vs loc explanation; how are they different?
在pandas 0.20.0及以上版本,
ix
已经被loc
和iloc
取代了,因此不讨论它。
-
前提,简单介绍一下它俩:
–loc
利用index的名称,来获取想要的行(或列)。(名称导向的这个特点,使得df[df.loc['col_name'] == 'condition', 'col_name'] = value_1
成立。
具体的实际应用,可参考 代码案例 一步实现EXCEL的合并数据、数据筛选、数据透视功能。–
iloc
利用index的具体位置(所以它只能是整数型参数),来获取想要的行(或列)。
举个栗子来直观看一下:
import...
s = pd.Series(np.nan, index=[49, 48, 47, 46, 45, 1, 2, 3, 4, 5])
print(s)
# s如下:
49 NaN
48 NaN
47 NaN
46 NaN
45 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
- 让我们用整数
3
来试着提数:
– 在这里,s.iloc[:3]
返回给我们的是前3行的数(因为把3当作位置信息做的处理),s.loc[:3]
返回前8行得数(因为把3当作名称对象做的处理):
print(s.iloc[:3])
#结果如下:
49 NaN
48 NaN
47 NaN
print(s.loc[:3])
# 结果如下:
49 NaN
48 NaN
47 NaN
46 NaN
45 NaN
1 NaN
2 NaN
3 NaN
- 如果我们试着用一个不在index里的整数,比如
6
会出现什么结果呢?
– 当然s.iloc[:6]
返回的是前6行的数。但是,s.loc[:6]
会被挂起提示KeyError,这是因为6
不是index的元素。
print(s.iloc[:6])
# 结果如下:
49 NaN
48 NaN
47 NaN
46 NaN
45 NaN
1 NaN
print(s.loc[:6])
# 结果如下:
keyError: 6
根据位置和名称信息混搭的取数
还是举个例子:对于一个DaraFrame,如果我想提取c
行及其之前所有的,同时属于前4列的数呢?
df = pd.DataFrame(np.nan,
index=list('abcde'),
columns=['x', 'y', 'z', 8, 9])
print(df)
# df如下:
x y z 8 9
a NaN NaN NaN NaN NaN
b NaN NaN NaN NaN NaN
c NaN NaN NaN NaN NaN
d NaN NaN NaN NaN NaN
e NaN NaN NaN NaN NaN
df_select = df.iloc[:df.index.get_loc('c') + 1, :4]
print(df_select)
# df_select如下
x y z 8
a NaN NaN NaN NaN
b NaN NaN NaN NaN
c NaN NaN NaN NaN
get_loc(pandas 0.24.1)是一个应用在index的工具,即“获取名称对象在index的位置(整数)”。注意,因为iloc[num_of_row_start : num_of_row_end, num_of_column_start : num_of_column_end]
不包含num_of_end,所以需要 +1才能包含c
行。
拓展
因此,可以利用.loc[]
提取目标行 / 目标列
print(df.loc[['b', 'c']])
# 结果如下
x y z 8 9
b NaN NaN NaN NaN NaN
c NaN NaN NaN NaN NaN
print(df.loc[:, ['y', 8]])
# 结果如下
y 8
a NaN NaN
b NaN NaN
c NaN NaN
d NaN NaN
e NaN NaN
print(df.loc[['b', 'c'], ['y', 8]])
# 结果如下
y 8
b NaN NaN
c NaN NaN
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/184255.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...