在同一iloc语句中使用切片和布尔索引

时间:2018-09-29 20:31:06

标签: python pandas

“ Python for data analysis”(ch5)使用双重选择:

data.iloc[:,:3][data.three>5]

此语句背后的逻辑没有解释。应该如何理解?

是否是对先前选择的选择,即data.iloc[:,:3]首先选择所有行和前三列,然后[data.three>5]将此选择减少到列“三”中的值较大的所有行比5?

我也看到了以下表达式:

df[['CoCode','Doc_Type','Doc_Nr','Amount_LC']][df['Amount_LC']>1000000000]

我有点迷茫。看来lociloc可以用于双重选择,即df.loc[][]的第二个[]的逻辑是什么?第一个和第二个中发生了什么?

3 个答案:

答案 0 :(得分:2)

此处将两个单独的选择应用于数据帧data

1)data.iloc[:,:3]正在选择所有行,以及直到(但不包括)列索引3的所有列,因此列索引为0、1和2

2)数据帧data仅限于列three的值大于5的所有行

这两个选择的输出与顺序无关,因此:

data.iloc[:,:3][data.three>5] == data[data.three>5].iloc[:,:3]将返回填充有True

的数据框

请注意,您在这里没有使用双重选择(如您所说的那样),而是在第一个选择中查询特定的行和列,而第二个选择仅是应用于第一个选择返回的数据帧的过滤器

实际上,您正在使用.iloc()从数据框中选择特定的索引位置(或切片),而.loc()允许根据列和行标签选择特定的位置。

最后,当使用data[data.three>5]之类的内容过滤数据框时,您可以将其读取为“返回数据框data中的行,其中该行的列three的值大于5 “。

答案 1 :(得分:0)

iloc和loc接受2个参数,即列和行。

data.iloc[<row selection> , <column selection>]

希望这会有所帮助。

答案 2 :(得分:0)

  

是否是对先前选择的选择,即data.iloc [:,:3]首先选择所有行和前三列,然后[data.three> 5]将此选择减少为所有值在其中的行列“三”是否大于5?

是的, @ rahlf23 有很好的解释。

  

看起来loc和iloc可以用于双重选择,即df.loc [] []第二个[]的逻辑是什么?第一个和第二个中发生了什么?

即使您可以对进行三重或更多选择。 示例:

df = pd.DataFrame({'a':[1,2,3,4,5], 'b':[6,7,8,9,10], 'c': [11,12,13,14,15]})

# It will give you first 3 rows of column a and b
df.loc[:,:2][:4][:3]

# It will give you {'a':[2,3], 'b':[7,8]}
df.iloc[:,:2][df.a*7 > df.c][:2]

# It will give you error, you can't slice more on columns
df.iloc[:,:2][:3,:1]