LOC是什么意思,iloc與loc區別

 2023-12-12 阅读 28 评论 0

摘要:iloc PK loc 導入numpy,pandas import numpy as np import pandas as pd 構建一個0,30左閉右開的偶數數組 data=np.arange(0,30,2) #arange(起始,結束,相差) data array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28]) 類型ndarray pri

iloc PK loc

導入numpy,pandas

import numpy as np
import pandas as pd

構建一個0,30左閉右開的偶數數組

data=np.arange(0,30,2)  #arange(起始,結束,相差)
data
array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28])

類型ndarray

print(type(data))
<class 'numpy.ndarray'>

LOC是什么意思、reshape變換形狀

data1=data.reshape(5,3) #reshape轉換形狀
print(data1)
[[ 0  2  4][ 6  8 10][12 14 16][18 20 22][24 26 28]]

類型還是ndarray

print(type(data1))   
<class 'numpy.ndarray'>

由ndarray類型轉成DaTaframe類型

data2=pd.DataFrame(data1,columns=('a','b','c')) #columns定義字段
data2a	b	c
0	0	2	4
1	6	8	10
2	12	14	16
3	18	20	22
4	24	26	28

iloc

取指定單行多列

data2.iloc[2] 
a    12
b    14
c    16
Name: 2, dtype: int32

LOC術語?iloc[start:end],索引[開始:結束],左閉右開

data2.iloc[1:4] 
a	b	c
1	6	8	10
2	12	14	16
3	18	20	22

指定行,列取到一個數字

data2.iloc[2,2]  #[行,列]
16

不能直接取字段,報取值錯誤

data2.iloc[2,'c']  #[行,列]
#ValueError: Location based indexing can only have [integer, integer slice (START point is INCLUDED, END point is EXCLUDED), listlike of integers, boolean array] types

可以用切片來取指定行列

data2.iloc[2:3,0:]
a	b	c
2	12	14	16

python中loc和iloc。取出DataFrame里面的值為ndarray

data2.iloc[2:3,0:].values
array([[12, 14, 16]])

loc

取第指定單行行,多列,與iloc一樣

data2.loc[2]
a    12
b    14
c    16
Name: 2, dtype: int32

loc[start:end],索引[開始:結束],左閉右閉–>與iloc不同

data2.loc[1:4]  
a	b	c
1	6	8	10
2	12	14	16
3	18	20	22
4	24	26	28

不能像iloc一樣直接取指定行,報類型錯誤

 data2.loc[2,3]  ##[行,列] 報錯
#TypeError: cannot do label indexing on <class 'pandas.core.indexes.base.Index'> with these indexers [2] of <class 'int'>

loc工作頻率范圍。可以去特定行和列,得到指定得一個數字

data2.loc[2,'c']
16

取指定data3指定行,指定列,有字段

data3=data2.loc[1:4]
data4=data3[['a','b']]
print(data4)
print(type(data4))  #類型DataFramea   b
1   6   8
2  12  14
3  18  20
4  24  26
<class 'pandas.core.frame.DataFrame'>

不能按著iloc的模樣取字段下的值

data2.loc[[1:4],['a','b']]  
SyntaxError: invalid syntax

取data3指定行單列,有字段,類型DataFrame

data5=data3[['a']]
print(data5)
print(type(data5))  a
1   6
2  12
3  18
4  24<class 'pandas.core.frame.DataFrame'>

dataframe的loc,取data3指定行單列,沒有字段,類型Series

data6=data3['a']
print(data6)
print(type(data6)) 
1     6
2    12
3    18
4    24
Name: a, dtype: int32
<class 'pandas.core.series.Series'>

它是datframe類型,取多列要行列并行都存在于一個列表里。
data5可以取是因為它取單列,
data6可以取是因為它取單列,并且是按series類型取的,多列不行。

data7=data3['a','b']
print(data7)
print(type(data7)) 
#KeyError: ('a', 'b')

上面我們證實data2.loc[2,3]會報類型錯誤
但是我們讓它有用武之地
取出特定行與列的內容
類型DataFrame

data8=data2.loc[[2,3],['b','c']]
data8
b	c
2	14	16
3	20	22

還可以這樣重復取

data9=data2.loc[[2,2,2,3],['b','c']]
data9
b	c
2	14	16
2	14	16
2	14	16
3	20	22

總結:

航向信標loc?1.loc:
通過行標簽索引行數據
例:loc[n]表示索引的是第n行(index 是整數)
loc[‘d’]表示索引的是第’d’行(index 是字符)
有行索引可以沒有字段取值,但有字段取值前必須得有行索引,
而且行索引只能為標簽索引形式來取,不能按切片形式來取。
單取切片形式可以,只是索引為左閉右閉。

2. .iloc
通過行索引獲取行數據,不能是字符,取索引必須按切片形式來取,不能按標簽,這是與loc的不同。索引為左閉右開。iloc也可以取指定行列,只不過得按切片形式索引,不能直接拿標簽索引來做。

建議:
當用行索引的時候, 盡量用 iloc 來進行索引; 而用標簽索引的時候用 loc 。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/196399.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息