導入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
取指定單行多列
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]])
取第指定單行行,多列,與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 。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态