㈠ python 怎麼把已有文檔里的文字輸出一次
因為在發現新詞時,你沒有存入unique_list。
改為
unique_list=[]
forwordsinword_list:
ifwordsnotinunique_list:
unique_list.append(words)
output_file.write(words+' ')
事實上整個腳本有些風格上的問題需要修改,不過我就不管了=~=
順帶一提,在認定代碼邏輯沒有錯誤卻發現輸出不符合預期時,可以考慮簡單地將過程中涉及的關鍵數據print出來,能發現出問題的代碼片段,再進行修改。
㈡ python 查看dataframe每列有多少個不同元素
方法一:
mylist = set(say)#say為所要統計的列表
for item in mylist: #將列表中的元素無重復的抽取出來,賦值給另一個列表
print item + str( say.count(item)) #list.count(item) 輸出item在list中出現的次數
方法二:
counts = { } #字典
for x in time_zones: #time_zones 為列表
if x in counts:
counts[x] += 1
else:
counts[x] = 1
print counts
方法三:
(Series與Datafram用法相同)
import numpy as np
import pandas as pd
from pandas import DataFrame
from pandas import Series
ss = Series(['Tokyo', 'Nagoya', 'Nagoya', 'Osaka', 'Tokyo', 'Tokyo'])
ss.value_counts() #value_counts 直接用來計算series裡面相同數據出現的頻率
(2)listuniquepython擴展閱讀:
python函數的其他高級用法
1.使用函數變數:
Python 的函數也是一種值:所有函數都是 function 對象,這意味著可以把函數本身賦值給變數,就像把整數、浮點數、列表、元組賦值給變數一樣。
2.使用函數作為函數形參:
有時候需要定義一個函數,該函數的大部分計算邏輯都能確定,但某些處理邏輯暫時無法確定,這意昧著某些程序代碼需要動態改變,如果希望調用函數時能動態傳入這些代碼,那麼就需要在函數中定義函數形參,這樣即可在調用該函數時傳入不同的函數作為參數,從而動態改變這段代碼。
3.使用函數作為返回值:
程序中,定義了一個 get_math_func() 函數,該函數將返回另一個函數。接下來在 get_math_func() 函數體內的 ①、②、③ 號粗體字代碼分別定義了三個局部函數,最後 get_math_func() 函數會根據所傳入的參數,使用這三個局部函數之一作為返回值。
在定義了會返回函數的 get_math_func() 函數之後,接下來程序調用 get_math_func() 函數時即可返回所需的函數。
㈢ python怎麼獲取list的某個元素的位置
幾種方式的回答:
1)
print('*'*15,'想找出裡面有重復數據的索引值','*'*15)
listA = [100, 94, 88, 82, 76, 70, 64, 58, 52, 46, 40, 34,76]
print('列表中第1次出現的位置 = ',listA.index(76))
2)
a_list = ['a','b','c','c','d','c']
find = 'c'
print('重復元素出現的位置索引分別是 = ',[i for i,v in enumerate(a_list) if v==find])
-----------------------------------------------------
3)### 求某個元素重復的索引值,函數方式表述如下:
a_list = ['a','b','c','c','d','c']
def unique_index(L,f):
"""L表示列表, i表示索引值,v表示values,f表示要查找的元素 """
return [i for (i,v) in enumerate(L) if v==f]
print('索引值 = ',unique_index(a_list,'c'))
運行結果:
索引值 = [2, 3, 5]
4)還缺一種,列出多個元素重復的索引值,以後再補充
......
㈣ python刪除列表中的重復值
答: 主要總結了以下三種方法進行列表中的重復值刪除。具體代碼如圖所示。
其中最簡單的就是方法一和方法三了,因為他們只需要進行相關函數的調用。
同學們如果對方法二感興趣的話,也可以進行動手復現,它相比於方法一和三會更難一點,但是更有利於鍛煉代碼思維。
㈤ Python處理大數據的技巧, 2022-06-21
(2022.06.21 Tues)
收集整理了Python處理大量數據的方法,基於Pandas,Numpy等數據處理工具。
用df的 info 方法並指定 memory_usage='deep' 參數,或使用df的 memory_usage 方法,並指定 deep=True 參數。
在讀取數據文件的方法中加入 nrows 參數選擇前n行數據讀取。
也可以跳過m行之後,讀取從m行開始的n行
當然也可以在 skiprows 選項中指定范圍,保留headers,即保留列名
可以指定 skiprows 中需要忽略的行,用list或array導入即可。下面是隨機
如果在這個指令中忽略 nrows=10 指令,則讀取跳過100行之後的所有數據。
預先指定讀入的列,縮小載入范圍
不同的數據類型佔用了不同大小的空間,對於尚未讀取的數據,可以提前指定類型( dtype );對於已經讀入的數據,通過 astype 方法修改成占空間更小的數據類型。
在讀入數據之前,通過字典指定每列對應的數據類型,讀入之後按照此類型顯示數據。
通過改變數據類型減少空間的案例。修改DataFrame d 中的一列 Sctcd ,注意到該列的數據都是1、2、0,而保存類型是object,果斷改成 uint8 ,通過 df.info(memory_usage='deep') 方法對比內存的使用情況。僅僅修改了一個列的類型,數據大小減小3MB。
一個特殊而高效的案例是當某一列的值只有有限個,不管是int還是string格式,且該列unque值遠小於列的長度,可以將該列轉變為 category 類,將節省大量空間。這么做當然也有代價,比如轉換成 category 類的數據將無法做max/min等運算,由數字轉換成的 category 也不能進行數值運算。這種轉換對內存的節省效果顯著,下面是對比。 dcol 只有兩列, Stkcd 和 Stknme ,查看unique的個數與總長度,顯示unique遠小於總長度,分別轉換為 category 類型,內存節省超過90%!
通過Pandas的 read_csv 方法中的 chunksize 選項指定讀取的塊大小,並迭代地對讀取的塊做運算。
1 https冒號//www點dataquest點io/blog/pandas-big-data/
2 CSDN - python 處理大量數據_如何用python處理大量數據
2 How to Work with BIG Datasets on 16G RAM (+Dask), on kaggle
㈥ 如何在python列表中查找某個元素的索引
1、方法一: 利用數組自身的特性 a.index(target), 其中a是目標list,target是需要的下標對應的值。代碼如下:
2、分片:
分片用於截取某個范圍內的元素,通過:來指定起始區間(左閉右開區間,包含左側索引值對應的元素,但不包含右測索引值對應的元素)。
分片包括起始索引對應的元素,但不包括終止索引對應的元素,索引為正值時可以發生越界但只會取到最後一個元素。如果索引值為負值,則表示從最右邊元素開始,此時需避免索引越界。
㈦ Python中生成器表達式的理解
9.11. 生成器表達式
有時簡單的生成器可以用簡潔的方式調用,就像不帶中括弧的鏈表推導式。這些表達式是為函數調用生成器而設計的。生成器表達式比完整的生成器定義更簡潔,但是沒有那麼多變,而且通常比等價的鏈表推導式更容易記。
例如:
>>> sum(i*i for i in range(10)) # sum of squares
285
>>> xvec = [10, 20, 30]
>>> yvec = [7, 5, 3]
>>> sum(x*y for x,y in zip(xvec, yvec)) # dot proct
260
>>> from math import pi, sin
>>> sine_table = {x: sin(x*pi/180) for x in range(0, 91)}
>>> unique_words = set(word for line in page for word in line.split())
>>> valedictorian = max((student.gpa, student.name) for student in graates)
>>> data = 'golf'
>>> list(data[i] for i in range(len(data)-1, -1, -1))
['f', 'l', 'o', 'g']
Footnotes
[1] 有一個例外。模塊對象有一個隱秘的只讀對象,名為 __dict__ ,它返回用於實現模塊命名空間的字典,命名 __dict__ 是一個屬性而非全局命名。顯然,使用它違反了命名空間實現的抽象原則,應該被嚴格限制於調試中。
㈧ 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 list找出一個元素的位置(重復元素怎麼分別找出位置)
使用list的index方法可以找到list中第一次出現該元素的位置
>>>l=['a','b','c','c','d','c']
>>>find='b'
>>>l.index(find)
1
找出出現該元素的所有位置可以使用一個簡單的表理解來實現
>>>find='c'
>>>[ifori,vinenumerate(l)ifv==find]
[2,3,5]
㈩ Python變形
1.長寬表的變形
什麼是長表?什麼是寬表?這個概念是對於某一個特徵而言的。例如:一個表中把性別存儲在某一個列中, 那麼它就是關於性別的長表;如果把性別作為列名,列中的元素是某一其他的相關特徵數值,那麼這個表是 關於性別的寬表。
1.1 pivot
pivot 是一種典型的長表變寬表的函數。對於一個基本的長變寬的操作而言,最重要的有三個要素,分別是變形後的行索引、需要轉到列索引的列, 以及這些列和行索引對應的數值,它們分別對應了 pivot 方法中的 index, columns, values 參數。新生成表的 列索引是 columns 對應列的 unique 值,而新表的行索引是 index 對應列的 unique 值,而 values 對應了想 要展示的數值列。
利用 pivot 進行變形操作需要滿足唯一性的要求,即由於在新表中的行列索引對應了唯一的 value ,因此原 表中的 index 和 columns 對應兩個列的行組合必須唯一。例如,現在把原表中第二行張三的數學改為語文就 會報錯,這是由於 Name 與 Subject 的組合中兩次出現 (」San Zhang」, 」Chinese」) ,從而最後不能夠確定到 底變形後應該是填寫 80 分還是 75 分。
pandas 從 1.1.0 開始,pivot 相關的三個參數允許被設置為列表,這也意味著會返回多級索引。這里構造一 個相應的例子來說明如何使用:下表中六列分別為班級、姓名、測試類型(期中考試和期末考試)、科目、成 績、排名。
根據唯一性原則,新表的行索引等價於對 index 中的多列使用 drop_plicates ,而列索引的長度為 values 中的元素個數乘以 columns 的唯一組合數量(與 index 類似)。
1.2 pivot_table
pivot 的使用依賴於唯一性條件,那如果不滿足唯一性條件,那麼必須通過聚合操作使得相同行列組合對應 的多個值變為一個值。例如,張三和李四都參加了兩次語文考試和數學考試,按照學院規定,最後的成績是 兩次考試分數的平均值,此時就無法通過 pivot 函數來完成。
1.3 melt
長寬表只是數據呈現方式的差異,但其包含的信息量是等價的,前面提到了利用 pivot 把長表轉為寬表,那 么就可以通過相應的逆操作把寬表轉為長表,melt 函數就起到了這樣的作用。
1.4 wide_to_long
melt 方法中,在列索引中被壓縮的一組值對應的列元素只能代表同一層次的含義,即 values_name 。現在 如果列中包含了交叉類別,比如期中期末的類別和語文數學的類別,那麼想要把 values_name 對應的 Grade 擴充為兩列分別對應語文分數和數學分數,只把期中期末的信息壓縮,這種需求下就要使用 wide_to_long 函數來完成。
2 索引的變形
2.1 stack 與 unstack
unstack 函數的作用是把行索引轉為列索引
unstack 的主要參數是移動的層號,默認轉化最內層,移動到列索引的最內層,同時支持同時轉化多個層
類似於 pivot 中的唯一性要求,在 unstack 中必須保證 被轉為列索引的行索引層和 被保留的行索引層構成 的組合是唯一的,例如把前兩個列索引改成相同的破壞唯一性,那麼就會報錯
與 unstack 相反,stack 的作用就是把列索引的層壓入行索引,其用法完全類似。
2.2 聚合與變形的關系
在上面介紹的所有函數中,除了帶有聚合效果的 pivot_table 以外,所有的函數在變形前後並不會帶來 values 個數的改變,只是這些值在呈現的形式上發生了變化。在上一章討論的分組聚合操作,由於生成了新的行列 索引,因此必然也屬於某種特殊的變形操作,但由於聚合之後把原來的多個值變為了一個值,因此 values 的 個數產生了變化,這也是分組聚合與變形函數的最大區別。
3 其他變形函數
3.1 crosstab
crosstab 並不是一個值得推薦使用的函數,因為它能實現的所有功能 pivot_table 都能完成,並且速度更快。 在默認狀態下,crosstab 可以統計元素組合出現的頻數,即 count 操作。例如統計 learn_pandas 數據集中 學校和轉系情況對應的頻數
3.2 explode
explode 參數能夠對某一列的元素進行縱向的展開,被展開的單元格必須存儲 list, tuple, Series, np.ndarray 中的一種類型。
3.3 get_mmies
get_mmies 是用於特徵構建的重要函數之一,其作用是把類別特徵轉為指示變數。例如,對年級一列轉為 指示變數,屬於某一個年級的對應列標記為 1,否則為 0