㈠ python 數據處理(二十四)—— 索引和選擇
如果你想獲取 'A' 列的第 0 和第 2 個元素,你可以這樣做:
這也可以用 .iloc 獲取,通過使用位置索引來選擇內容
可以使用 .get_indexer 獲取多個索引:
警告 :
對於包含一個或多個缺失標簽的列表,使用 .loc 或 [] 將不再重新索引,而是使用 .reindex
在以前的版本中,只要索引列表中存在至少一個有效標簽,就可以使用 .loc[list-of-labels]
但是現在,只要索引列表中存在缺失的標簽將引發 KeyError 。推薦的替代方法是使用 .reindex() 。
例如
索引列表的標簽都存在
先前的版本
但是,現在
索引標簽列表中包含不存在的標簽,使用 reindex
另外,如果你只想選擇有效的鍵,可以使用下面的方法,同時保留了數據的 dtype
對於 .reindex() ,如果有重復的索引將會引發異常
通常,您可以將所需的標簽與當前軸做交集,然後重新索引
但是,如果你的索引結果包含重復標簽,還是會引發異常
使用 sample() 方法可以從 Series 或 DataFrame 中隨機選擇行或列。
該方法默認會對行進行采樣,並接受一個特定的行數、列數,或數據子集。
默認情況下, sample 每行最多返回一次,但也可以使用 replace 參數進行替換采樣
默認情況下,每一行被選中的概率相等,但是如果你想讓每一行有不同的概率,你可以為 sample 函數的 weights 參數設置抽樣權值
這些權重可以是一個列表、一個 NumPy 數組或一個 Series ,但它們的長度必須與你要抽樣的對象相同。
缺失的值將被視為權重為零,並且不允許使用 inf 值。如果權重之和不等於 1 ,則將所有權重除以權重之和,將其重新歸一化。例如
當應用於 DataFrame 時,您可以通過簡單地將列名作為字元串傳遞給 weights 作為采樣權重(前提是您要采樣的是行而不是列)。
sample 還允許用戶使用 axis 參數對列進行抽樣。
最後,我們還可以使用 random_state 參數為 sample 的隨機數生成器設置一個種子,它將接受一個整數(作為種子)或一個 NumPy RandomState 對象
當為該軸設置一個不存在的鍵時, .loc/[] 操作可以執行放大
在 Series 的情況下,這實際上是一個追加操作
可以通過 .loc 在任一軸上放大 DataFrame
這就像 DataFrame 的 append 操作
由於用 [] 做索引必須處理很多情況(單標簽訪問、分片、布爾索引等),所以需要一些開銷來搞清楚你的意圖
如果你只想訪問一個標量值,最快的方法是使用 at 和 iat 方法,這兩個方法在所有的數據結構上都實現了
與 loc 類似, at 提供了基於標簽的標量查找,而 iat 提供了基於整數的查找,與 iloc 類似
同時,你也可以根據這些索引進行設置值
如果索引標簽不存在,會放大數據
另一種常見的操作是使用布爾向量來過濾數據。運算符包括:
|(or) 、 &(and) 、 ~ (not)
這些必須用括弧來分組,因為默認情況下, Python 會將 df['A'] > 2 & df['B'] < 3 這樣的表達式評估為 df['A'] > (2 & df['B']) < 3 ,而理想的執行順序是 (df['A'] > 2) & (df['B'] < 3)
使用一個布爾向量來索引一個 Series ,其工作原理和 NumPy ndarray 一樣。
您可以使用一個與 DataFrame 的索引長度相同的布爾向量從 DataFrame 中選擇行
列表推導式和 Series 的 map 函數可用於產生更復雜的標准
我們可以使用布爾向量結合其他索引表達式,在多個軸上索引
iloc 支持兩種布爾索引。如果索引器是一個布爾值 Series ,就會引發異常。
例如,在下面的例子中, df.iloc[s.values, 1] 是正確的。但是 df.iloc[s,1] 會引發 ValueError 。
㈡ python:pandas之DataFrame取行列(df.loc(),df.iloc())以及索引
1、pandas排序,並取前N列數據
2、取行、取列DataFrame.loc,DataFrame.iloc
-取行DataFrame.loc,DataFrame.iloc
㈢ 如何用Python建立索引
importre
patt=re.compile("w+")
defmakeIndex(filename):
index={}
withopen(filename)ashandle:
fori,lninenumerate(handle):
forwordinpatt.findall(ln):
index.setdefault(word,[]).append(i+1)
returnindex
defprintIndex(index):
forword,lstinindex.items():
print"%s:%s"%(
word,",".join(map(str,lst))
)
defindexQuery(index,*args):
found=None
forwordinargs:
got=index.get(word,[])
ifnotgot:
returnNone
ifnotfound:
found=set(got)
else:
found&=set(got)
ifnotfound:
returnNone
returnlist(found)
index=makeIndex("qa.py")
printIndex(index)
printindexQuery(index,"in","enumerate")
㈣ 怎麼把列表裡的內容按索引寫入不同的文件
1.當列表之中的元素都是字元串類型或者是數字類型的時候,就可以使用open()函數在當前python文件內創建出一個文本文件對象,再調用writelines()方法將列表給寫入到該文件之中。那麼這個時候列表內元素實際上都會連接起來變成一行寫入,示例如下:
l=["A","B","C","D"]
f=open("k.txt","w")
f.writelines(l)
f.close()
2.另外一種情況就是將列表轉為字元串類型再寫入到文件之中,而列表轉為字元串的話實際上是將整個列表結構及其值都加上鬧帆引號來表示為字元串類型。也就是寫入文件後可看到數據還是放在方括弧內的,並且結構都沒有發生變化,代碼示例如下:
l=["A","B","C","D",1,2,3]
f=open("k.txt","w")
f.write(str(l))
f.close()
3.那麼要將列表寫入到Excel文件或者是Csv文件這種表格類型的文件中時,就需要用到第三模塊以及for循環了。因為需要旁彎如使用此模塊來將表格文件打開或者創建,而for循環則是為了將列表數據寫入到表格文件的第幾行幾列之中,詳細代碼示例如下所示:
def data_write(file_path, datas):
f = xlwt.Workbook()
sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True)
i = 0
for data in datas:
for j in range(len(data)):
sheet1.write(i,j,data[j])
i = i + 1
f.save(file_path)
以上就是關於「Python如何把列表寫入文件?Python將列表寫入文件如何做」的全部內容了。運啟
㈤ pandas將某一行設置為列索引(python)
b[b.['state']=='ohio'].index
In [36]: list(df['state']).index('ohio')
Out[36]: 0
In [37]: list(df['state']).index('nevada')
Out[37]: 1
訪問某一列可以通過b['state']和b.state這兩種方法進行,但是輸出的pandas裡面的Series這種數據類型,因此b['state'].index()返回Index([0,1], dtype=object)。
因為數據分析知某個值並不是非常重要,所以沒有直接輸出索引值的函數,可以通過query()函數,b.query('state == "obio"'),輸出含有ohio的行自然也就知道索引。
(5)python按照行列索引填充擴展閱讀:
索引是為了加速對表中數據行的檢索而創建的一種分散的存儲結構。索引是針對表而建立的,它是由數據頁面以外的索引頁面組成的,每個索引頁面中的行都會含有邏輯指針,以便加速檢索物理數據。
在資料庫關系圖中,可以在選定表的「索引/鍵」屬性頁中創建、編輯或刪除每個索引類型。當保存索引所附加到的表,或保存該表所在的關系圖時,索引將保存在資料庫中。
在資料庫系統中建立索引主要有以下作用:
(1)快速取數據;
(2)保證數據記錄的唯一性;
(3)實現表與表之間的參照完整性;
(4)在使用ORDER by、group by子句進行數據檢索時,利用索引可以減少排序和分組的時間。
㈥ Python 通用的序列操作
序列 (sequence)是Python最基本的一種數據結構。
序列中的每個元素都有編號,即其位置或索引,其中第一個元素的索引為0,第二個元素的索引為1,依此類推。Python的序列索引支持負數,-1表示序列的最後一個元素,這是Python不同其他很多種語言不同的地方。
Python內置了多種序列,列表、元組、字元串是其中最常用的三種,本文為你描述各種序列的通用操作。
索引從0開始,索引號為0的元素為1,greeting的索引號為0的元素為'H'。
你可能注意到'Hello'和'H'都用單引號包圍,這是Python不同於其他語言的另一個地方。Python並沒有專門用於表示字元的數據類型,因此一個字元就是一個只包含一個元素的字元串。
Python的序列索引支持負數,-1表示倒數第一個元素。
切片 (slicing)操作用於訪問序列特定 范圍 內的元素。在一對方括弧內使用兩個索引,並用冒號隔開:
注意到,返回的序列並未包含願序列的第6個元素7,就相當於數學集合中的 左閉右開區間 操作。
換言之,你提供兩個索引來指定切片的邊界,其中第一個索引指定的元素包含在切片內,但第二個索引指定的元素不包含在切片內。
保留冒號,省略羨運備第一個索引,表示從序列起始位置開始切片;省略第二個索引,表示切片到序列末尾,包含最後一個元素:
這個操作的效果是:在指定的區間內間隔取元素,語法格式為:
例如:
步長為正數時,它從起點移到終點,而步長為負數時,它從終點移到起點。
可以使用加法運算(+運算符)拼接兩個序列:
從錯誤消息兄毀可知,不能拼接列表和字元串,雖然它們都是序列。一般而言,不悄配能拼接不同類型的序列。
將序列與數x 相乘時,將重復這個序列x 次來創建一個新序列:
初始化一個長度為10的空列表:
成員資格檢查判定一個元素是否存在於集合中,如存在返回True,否則返回False,實際上是一個布爾表達式。
語法:
例如:
內置函數 len 返回序列包含的元素個數,而 min 和 max 分別返回序列中最小和最大的元素。
Python通用的序列操作有:索引、切片、乘法、成員資格檢查、長度、最小值和最大值。
㈦ Python用數列索引數列的問題
首先:python中的列表是不能這樣索引的,報的錯翻譯過來是:列表的索引要麼是切片要麼是數字而不能是一個列表。
1 數字:如 y[1], y[3], y[-1](取倒數第一個元素)
2 切片:如y[1:3](取第1到第3個元素),y[:3](取前三個元素),y[3:](取第三個元素之後的所有元素)
其次,要實現你所需的功能,有兩種方案:
1 使用循環來實現
x=[0,1,2,3,4,5,6]
y=[11,22,33,44,55,66,77]
random.shuffle(x)
y2=[]#存儲結果
foriinrange(len(x)):
y2.append(y[x[i]])
2 使用numpy實現,numpy是python中常用的數據分析庫,需要單獨安裝
importnumpyasnp
importrandom
x=[0,1,2,3,4,5,6]
y=np.array([11,22,33,44,55,66,77])
random.shuffle(x)
y[x]
㈧ Python pandas用法
在Python中,pandas是基於NumPy數組構建的,使數據預處理、清洗、分析工作變得更快更簡單。pandas是專門為處理表格和混雜數據設計的,而NumPy更適合處理統一的數值數組數據。
使用下面格式約定,引入pandas包:
pandas有兩個主要數據結構:Series和DataFrame。
Series是一種類似於一維數組的對象,它由 一組數據 (各種NumPy數據類型)以及一組與之相關的 數據標簽(即索引) 組成,即index和values兩部分,可以通過索引的方式選取Series中的單個或一組值。
pd.Series(list,index=[ ]) ,第二個參數是Series中數據的索引,可以省略。
Series類型索引、切片、運算的操作類似於ndarray,同樣的類似Python字典類型的操作,包括保留字in操作、使用.get()方法。
Series和ndarray之間的主要區別在於Series之間的操作會根據索引自動對齊數據。
DataFrame是一個表格型的數據類型,每列值類型可以不同,是最常用的pandas對象。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典(共用同一個索引)。DataFrame中的數據是以一個或多個二維塊存放的(而不是列表、字典或別的一維數據結構)。
pd.DataFrame(data,columns = [ ],index = [ ]) :columns和index為指定的列、行索引,並按照順序排列。
如果創建時指定了columns和index索引,則按照索引順序排列,並且如果傳入的列在數據中找不到,就會在結果中產生缺失值:
數據索引 :Series和DataFrame的索引是Index類型,Index對象是不可修改,可通過索引值或索引標簽獲取目標數據,也可通過索引使序列或數據框的計算、操作實現自動化對齊。索引類型index的常用方法:
重新索引 :能夠改變、重排Series和DataFrame索引,會創建一個新對象,如果某個索引值當前不存在,就引入缺失值。
df.reindex(index, columns ,fill_value, method, limit, ) :index/columns為新的行列自定義索引;fill_value為用於填充缺失位置的值;method為填充方法,ffill當前值向前填充,bfill向後填充;limit為最大填充量; 默認True,生成新的對象,False時,新舊相等不復制。
刪除指定索引 :默認返回的是一個新對象。
.drop() :能夠刪除Series和DataFrame指定行或列索引。
刪除一行或者一列時,用單引號指定索引,刪除多行時用列表指定索引。
如果刪除的是列索引,需要增加axis=1或axis='columns'作為參數。
增加inplace=True作為參數,可以就地修改對象,不會返回新的對象。
在pandas中,有多個方法可以選取和重新組合數據。對於DataFrame,表5-4進行了總結
適用於Series和DataFrame的基本統計分析函數 :傳入axis='columns'或axis=1將會按行進行運算。
.describe() :針對各列的多個統計匯總,用統計學指標快速描述數據的概要。
.sum() :計算各列數據的和
.count() :非NaN值的數量
.mean( )/.median() :計算數據的算術平均值、算術中位數
.var()/.std() :計算數據的方差、標准差
.corr()/.cov() :計算相關系數矩陣、協方差矩陣,是通過參數對計算出來的。Series的corr方法用於計算兩個Series中重疊的、非NA的、按索引對齊的值的相關系數。DataFrame的corr和cov方法將以DataFrame的形式分別返回完整的相關系數或協方差矩陣。
.corrwith() :利用DataFrame的corrwith方法,可以計算其列或行跟另一個Series或DataFrame之間的相關系數。傳入一個Series將會返回一個相關系數值Series(針對各列進行計算),傳入一個DataFrame則會計算按列名配對的相關系數。
.min()/.max() :計算數據的最小值、最大值
.diff() :計算一階差分,對時間序列很有效
.mode() :計算眾數,返回頻數最高的那(幾)個
.mean() :計算均值
.quantile() :計算分位數(0到1)
.isin() :用於判斷矢量化集合的成員資格,可用於過濾Series中或DataFrame列中數據的子集
適用於Series的基本統計分析函數,DataFrame[列名]返回的是一個Series類型。
.unique() :返回一個Series中的唯一值組成的數組。
.value_counts() :計算一個Series中各值出現的頻率。
.argmin()/.argmax() :計算數據最大值、最小值所在位置的索引位置(自動索引)
.idxmin()/.idxmax() :計算數據最大值、最小值所在位置的索引(自定義索引)
pandas提供了一些用於將表格型數據讀取為DataFrame對象的函數。下表對它們進行了總結,其中read_csv()、read_table()、to_csv()是用得最多的。
在數據分析和建模的過程中,相當多的時間要用在數據准備上:載入、清理、轉換以及重塑。
在許多數據分析工作中,缺失數據是經常發生的。對於數值數據,pandas使用浮點值NaN(np.nan)表示缺失數據,也可將缺失值表示為NA(Python內置的None值)。
替換值
.replace(old, new) :用新的數據替換老的數據,如果希望一次性替換多個值,old和new可以是列表。默認會返回一個新的對象,傳入inplace=True可以對現有對象進行就地修改。
刪除重復數據
利用函數或字典進行數據轉換
df.head():查詢數據的前五行
df.tail():查詢數據的末尾5行
pandas.cut()
pandas.qcut() 基於分位數的離散化函數。基於秩或基於樣本分位數將變數離散化為等大小桶。
pandas.date_range() 返回一個時間索引
df.apply() 沿相應軸應用函數
Series.value_counts() 返回不同數據的計數值
df.aggregate()
df.reset_index() 重新設置index,參數drop = True時會丟棄原來的索引,設置新的從0開始的索引。常與groupby()一起用
numpy.zeros()
㈨ python(pandas模塊)
1.什麼是pandas? numpy模塊和pandas模塊都是用於處理數據的模塊。 numpy主要用於針對數組進行統計計算,處理數字數據比較方便。 pandas除了可以處理數字數據,還可...
㈩ python如何將列表作為列表的索引
1.
a=['a','b','c','d','e','f','g','h','i','j','k','l','m','n']
b=[1,4,3,6,10]
c=type(a)(map(lambdai:a[i],b))#這里沒有判斷b的元素作為a的索引的時候值太大溢出的異常
printc
>>>
['b','e','d','g','k']
>>>
------------------------------
2.
>>>importnumpyasnp
>>>b=np.array([2,3,4,5,6])
>>>a=np.array([0,2,4])
>>>b[a]
array([2,4,6])