“ 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]
我有点迷茫。看来loc
和iloc
可以用于双重选择,即df.loc[][]
的第二个[]
的逻辑是什么?第一个和第二个中发生了什么?
答案 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]