python数据处理
1 刪除dataframe中有NAN的
這是使用字典創(chuàng)建DataFrame,key將作為表頭
1.1刪除表中一行全為NAN的行
1.2刪除表中含有任何的NAN的行
1.3 刪除表一列全為NAN的列
1.4刪除表中含有任何的NAN的列
刪除表中某幾列
直接用data.drop
data.drop(['Probability_test', 'Kmin_test', 'Kmax_test', 'action_test'], axis=1, inplace=True)
2 pandas中對列進行上下平移(shift)
通過shift函數(shù)里面的值來控制向上還是向下平移, 缺少的值會填充NaN,groupby函數(shù)里的參數(shù)控制基于什么字段進行shift。
2.1 上移shift(-1)
2.2 下移shift(1)
3.批量讀取文件夾中所有文件
通過os模塊讀取文件夾的所有文件
得到的a是一個list
對每個文件進行操作
用os.path.abspath()可以獲取絕對路徑
用os.path.join(domain,info)可以獲取文件夾中每個文件的完整路徑(絕對路徑)
https://blog.csdn.net/brucewong0516/article/details/79062340
4. python tile函數(shù)
tile函數(shù)位于python模塊 numpy.lib.shape_base中,他的功能是重復(fù)某個數(shù)組。比如tile(A,n),功能是將數(shù)組A重復(fù)n次,構(gòu)成一個新的數(shù)組
5.python中**運算符
5.1 矩陣間和np.array間的乘法運算
a和b是兩個matrices,那么a*b,就是矩陣積
numpy里面arrays遵從逐個元素的運算,所以array:d 和e的d?e運算相當于對應(yīng)的元素相乘
5.2 **運算符
因為a是個matrix,所以a??2返回的是a?a,相當于矩陣相乘。而c是array,c??2相當于,c中的元素逐個求平方。
6 min(0),max(0)的用法
7 分組求平均值(groupby)
依據(jù)Kmin,Kmax,Probability,action來計算reward的平均值
8 數(shù)據(jù)分組和聚合運算
pandas對象中的數(shù)據(jù)會根據(jù)你所提供的一個或多個鍵被拆分為多組,拆分操作是在對象的特定軸上執(zhí)行的(groupby分組默認是在axis=0上進行分組的),然后將一個函數(shù)應(yīng)用到各個分組并產(chǎn)生一個新值,最后所有這些函數(shù)的執(zhí)行結(jié)果會被合并到最終的結(jié)果對象中。
8.1 groupby分組
這樣生成了一個groupby對象,實際上還未進行任何計算,可對其調(diào)用方法進行計算
下面計算平均值
1.以key1為依據(jù),對data1進行分組
求得平均值
2.可以將列名直接當作分組對象,分組中,數(shù)值列會被聚合,非數(shù)值列會從結(jié)果中排除
原始數(shù)據(jù):
可以看到原來數(shù)據(jù)里面的key2是非數(shù)值列,被排除掉了
3.以多列分組求平均值
以key1和key2分組
4.使用groupby的size方法
可以返回一個含有分組大小的series
按key1的值和key2的值分組,并統(tǒng)計個數(shù)
原始數(shù)據(jù):
首先根據(jù)key1,看a有三個,再根據(jù)key2排除了a two這個組合,剩下兩個a one
8.2 對分組進行迭代
groupby對象支持迭代,可以產(chǎn)生一組二元數(shù)組(由分組名稱和數(shù)據(jù)塊構(gòu)成)
對于多重鍵的情況,元組的第一個元素將會是由鍵值組成的元組
groupby分組默認是在axis=0上進行分組的,通過設(shè)置也可以在其他軸上進行分組
8.3 對部分列進行聚合
8.4 數(shù)據(jù)聚合
對于聚合,一般指的是能夠從數(shù)組產(chǎn)生的標量值的數(shù)據(jù)轉(zhuǎn)換過程,常見的聚合運算都有相關(guān)的統(tǒng)計函數(shù)快速實現(xiàn),當然也可以自定義聚合運算
要使用自己的定義的聚合函數(shù),需將其傳入aggregate或agg方法即可
此處,將自定義的聚合函數(shù)傳入agg中
8.5 分組運算和轉(zhuǎn)換
聚合僅是分組運算的一種,它是數(shù)據(jù)轉(zhuǎn)換的一個特例,本節(jié)介紹transform和apply方法,他們能夠執(zhí)行更多其他的分組運算
以下是為一個DataFrame添加一個用于存放各索引組平均值的列,利用了先聚合再合并
用merge合并
實際上可以對DataFrame進行transform方法,對比一下下面兩種的區(qū)別,transform會將一個函數(shù)應(yīng)用到各個分組
參考:https://www.cnblogs.com/splended/p/5278078.html
9 統(tǒng)計每個標簽出現(xiàn)的次數(shù)
10 生成pandas數(shù)據(jù)
要生成pandas數(shù)據(jù),先將其轉(zhuǎn)換成字典,再通過pd.DataFrame(dict)方式轉(zhuǎn)成pandas數(shù)據(jù)
lenses.txt數(shù)據(jù):
11 fit()函數(shù)不能接收string類型數(shù)據(jù)
string數(shù)據(jù)序列化
可以看到報錯,ValueError:could not convert string to float:'young'
因為在fit()函數(shù)不能接收string類型的數(shù)據(jù),通過打印的信息可以看到,數(shù)據(jù)都是string類型的。在使用fit()函數(shù)之前,我們需要對數(shù)據(jù)集進行編碼,這里可以使用兩種方法:
LabelEncoder:將字符串轉(zhuǎn)換為增量值
OneHotEncoder:使用One-of-K算法將字符串轉(zhuǎn)換為整數(shù)
為了對string類型的數(shù)據(jù)序列化,需要先生成pandas數(shù)據(jù),這樣方便我們的序列化工作。這里我使用的方法是,原始數(shù)據(jù)->字典->pandas數(shù)據(jù)
數(shù)據(jù)序列化(需要導(dǎo)入LabelEncoder)
運行結(jié)果:
12 將兩個含有字符串的集合取并集
13 reduce()函數(shù)會對參數(shù)序列中元素進行累積
函數(shù)將一個數(shù)據(jù)集合(鏈表,元組等)中的所有數(shù)據(jù)進行下列操作:用傳給 reduce 中的函數(shù) function(有兩個參數(shù))先對集合中的第 1、2 個元素進行操作,得到的結(jié)果再與第三個數(shù)據(jù)用 function 函數(shù)運算,最后得到一個結(jié)果。
14 拉普拉斯平滑和下溢出
利用貝葉斯分類器對文檔進行分類時,要計算多個概率的乘積以獲得文檔屬于某個類別的概率,即計算p(w0|1)p(w1|1)p(w2|1)。如果其中有一個概率值為0,那么最后的成績也為0。
從上圖可以看出,在計算的時候已經(jīng)出現(xiàn)了概率為0的情況。如果新實例文本,包含這種概率為0的分詞,那么最終的文本屬于某個類別的概率也就是0了。顯然,這樣是不合理的,為了降低這種影響,可以將所有詞的出現(xiàn)數(shù)初始化為1,并將分母初始化為2。這種做法就叫做拉普拉斯平滑(Laplace Smoothing)又被稱為加1平滑,是比較常用的平滑方法,它就是為了解決0概率問題。
除此之外,另外一個遇到的問題就是下溢出,這是由于太多很小的數(shù)相乘造成的。學(xué)過數(shù)學(xué)的人都知道,兩個小數(shù)相乘,越乘越小,這樣就造成了下溢出。在程序中,在相應(yīng)小數(shù)位置進行四舍五入,計算結(jié)果可能就變成0了。為了解決這個問題,對乘積結(jié)果取自然對數(shù)。通過求對數(shù)可以避免下溢出或者浮點數(shù)舍入導(dǎo)致的錯誤。同時,采用自然對數(shù)進行處理不會有任何損失。下圖給出函數(shù)f(x)和ln(f(x))的曲線。
沒有進行拉普拉斯平滑和下溢出操作之前
進行了拉普拉斯平滑和取對數(shù)防止下溢出操作后的
15 從txt文件中讀取字符串,并將字符串轉(zhuǎn)換為字符列表
正則表達式中,+代表重復(fù)1次至多次,*表示重復(fù)0次到多次 所以在切分的時候,如果正則表達是為r'W*',那就會見到非數(shù)字字母 零次或者多次就會切分 比如['ab cd ede?']切分后就是['a','b',' ','c','d',' ',' ','e','d',e','?'] 再加上后面的的語句return [ i for i in list if len(i)>2],因為每個字符串的長度都小于2,自然返回空集 把正則表達式改為r‘W+’就好啦
切分之后的
16 文本向量化
生成的returnVec長度與vocabList長度相同,遍歷inputSet中的單詞,并查找是否在詞匯列表vocabList出現(xiàn),出現(xiàn)的把該位置置為1,未出現(xiàn)的就是之前初始化0
17 從50個郵件中隨機選出40個作為訓(xùn)練集,10個作為測試集
18 sorted排序
當待排序列表的元素由多字段構(gòu)成時,我們可以通過sorted(iterable,key,reverse)的參數(shù)key來制定我們根據(jù)哪個字段對列表元素進行排序。
key=lambda 元素: 元素[字段索引]
例如:想對元素第二個字段排序,則
key=lambda y: y[1] 備注:這里y可以是任意字母,等同key=lambda x: x[1]
對字典進行排序
根據(jù)鍵的值進行倒序排序
首先運用items()獲取字典的鍵值tuple列表,通過key來設(shè)定根據(jù)哪個字段進行排序
總之,排序,是要對列表排序,如果是對字典排序,需要將字典轉(zhuǎn)換成鍵值對tuple列表的形式之后,再進行排序。
19 壓縮與解壓縮
注意要將數(shù)據(jù)打亂
20 if not
if not 就是一個判斷語句,not 表示 非,
寫成這個樣子可能就理解了:
if not cond:
do_something()
意思就是如果 cond 為 “假值” (False,None,"" 等)時,執(zhí)行分支里的語句。如果學(xué)過別的語言,比如 CC++ 等,上面的語句等價于:
if !cond {
do_something();
}
使用if not x這種寫法的前提是:必須清楚x等于None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元組()時對你的判斷沒有影響才行。
在python中 None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元組()都相當于False。
21 Numpy的矩陣索引和array數(shù)組索引
矩陣索引使用[i,j]方式,數(shù)組索引使用[i][j]
22 getA()函數(shù)的作用
getA()函數(shù)與mat()函數(shù)的功能相反,是將一個numpy矩陣轉(zhuǎn)換為數(shù)組
23 梯度上升算法原理解析
m為行數(shù),代表有多少個樣本;n為列數(shù),代表有多少個特征。
n決定了weights的個數(shù)
24 Numpy中np.append()
numpy.append(arr, values, axis=None)
意思就是,將arr和values會重新組合成新的數(shù)組,作為返回值。axis是一個可選的值。
25 np.c_[xx.ravel(), y.ravel()]
np.c_[],組成矩陣(xx,yy對應(yīng)位置配對)
xx.ravel()拉直,降低xx的維度,變成一行n列
26 np.vstack(x).reshape(-1,2)和np.squeeze(Y_c)
26.1 np.vstack(x)按照行順序把數(shù)組垂直地堆疊起來
reshape(-1,2)n行2列(用-1表示n行)
26.2 np.squeeze(Y_c)
將向量數(shù)組轉(zhuǎn)換為秩為1的數(shù)組
27 tf.reduce_mean(x, axis)
表示求取矩陣或張量指定維度的平均值。若不指定第二個參數(shù),則在所有元素中取平均值;若指定第二個參數(shù)為0, 則在第一維元素上取平均值,即每一列求平均值;若指定第二個參數(shù)為1,則在第二維元素上取平均值,即每一行求平均值。
28 os.path.join()
表示把參數(shù)字符串按照路徑命名規(guī)則拼接
29 np.sign
就是大于0的返回1.0
小于0的返回-1.0
等于0的返回0.0
30 Python中flatten, matrix.A用法
flatten的作用:返回一個折疊成一維的數(shù)組。
但是該函數(shù)只能適用于numpy對象,即array或者mat
你的xMat折疊成一維數(shù)組,而且是按A的方式,進行折疊,然后[0]是取第一個元素
a是個矩陣或者數(shù)組,a.flatten()就是把a降到一維,默認是按橫的方向降
此時的a是個矩陣,降維后還是個矩陣,矩陣.A(等效于矩陣.getA())變成了數(shù)組,A[0]就是數(shù)組里的第一個元素
31 加載文本中數(shù)據(jù)的方法
當從文本中讀取一行數(shù)據(jù)時候,數(shù)據(jù)的形式是這樣的
這樣的數(shù)據(jù)格式不符合要求,可以使用map方法
使用map方法
得到的數(shù)據(jù)形式:
32 Python中的size, shape, len, count
33 Python中列表,numpy中數(shù)組和矩陣的區(qū)別
Python中沒有數(shù)組,只有元組和列表。
Python列表與numpy數(shù)組的區(qū)別
矩陣
數(shù)組
矩陣
數(shù)組
34 np.nonzero
np.nonzero(a)函數(shù)的作用:
將對矩陣a的所有非零元素, 分別安裝兩個維度, 一次返回其在各維度上的目錄值。
因為矩陣只有一個非0值,在第0行,第0列
因為矩陣a只有兩個非零值, 在第0行、第0列,和第1行、第0列。所以結(jié)果元組中,第一個行維度數(shù)據(jù)為(0,1) 元組第二個列維度都為(0,0)。
35 矩陣轉(zhuǎn)為數(shù)組.A
36 將數(shù)組或矩陣轉(zhuǎn)換成列表tolist()
37 Numpy在reshape函數(shù)中使用-1
Numpy 允許我們根據(jù)給定的新形狀重塑矩陣,新形狀應(yīng)該和原形狀兼容。有意思的是,我們可以將新形狀中的一個參數(shù)賦值為-1。這僅僅表明它是一個未知的維度,我們希望 Numpy 來算出這個未知的維度應(yīng)該是多少:Numpy 將通過查看數(shù)組的長度和剩余維度來確保它滿足上述標準。讓我們來看以下例子:
總而言之,當試圖對一個張量進行 reshape 操作時,新的形狀必須包含與舊的形狀相同數(shù)量的元素,這意味著兩個形狀的維度乘積必須相等。當使用 -1 參數(shù)時,與-1 相對應(yīng)的維數(shù)將是原始數(shù)組的維數(shù)除以新形狀中已給出維數(shù)的乘積,以便維持相同數(shù)量的元素。
38 Numpy的argpartion函數(shù):找到N個最大值的索引并返回N個值
Numpy 的 argpartion 函數(shù)可以高效地找到 N 個最大值的索引并返回 N 個值。在給出索引后,我們可以根據(jù)需要進行值排序。
39 Numpy中setdiff1d函數(shù)找到僅在A數(shù)組中有而B數(shù)組沒有的元素
我們可以使用 Numpy extract () 函數(shù)從數(shù)組中提取符合條件的特定元素。
例子:模3
41 Numpy中clip函數(shù)是數(shù)組中的值保持在一定區(qū)間內(nèi)
在很多數(shù)據(jù)處理和算法中(比如強化學(xué)習(xí)中的 PPO),我們需要使得所有的值保持在一個上下限區(qū)間內(nèi)。Numpy 內(nèi)置的 Clip 函數(shù)可以解決這個問題。Numpy clip () 函數(shù)用于對數(shù)組中的值進行限制。給定一個區(qū)間范圍,區(qū)間范圍外的值將被截斷到區(qū)間的邊界上。例如,如果指定的區(qū)間是 [-1,1],小于-1 的值將變?yōu)?1,而大于 1 的值將變?yōu)?1。
示例1:限制數(shù)組中的最小值為 2,最大值為 6
示例2:限制數(shù)組中的最小值為2,最大值為5
42 數(shù)組切片[:5:-1]的含義
a[2:7:2]表示從索引2開始到索引7停止,間隔為2
a[:5:-1],-1反轉(zhuǎn)
冒號 : 的解釋:如果只放置一個參數(shù),如 [2],將返回與該索引相對應(yīng)的單個元素。如果為 [2:],表示從該索引開始以后的所有項都將被提取。如果使用了兩個參數(shù),如 [2:7],那么則提取兩個索引(不包括停止索引)之間的項。
43 time模塊,計算當前時間和時間差
43.1 計算當前時間戳
https://blog.csdn.net/liuweiyuxiang/article/details/71075306
43.2 計算時間差
往前推5分鐘
可以5*60=360s,計算時間戳的時候,再*1000轉(zhuǎn)成毫秒級的
44 Numpy中用布爾值來替換值
Numpy可以運用布爾值來替換值
在數(shù)組中
在矩陣中
可以看到替換有個很有用的地方,就是可以替換那些空值
如,我們現(xiàn)在讀取一個字符矩陣,其中有一個控制,其中的控制我們很有必要把它替換成其他值,可以用數(shù)據(jù)的平均值或者直接把它刪除。
例:將空值替換成“0”的操作
45 Groupby詳解
在日常的數(shù)據(jù)分析中,經(jīng)常需要將數(shù)據(jù)根據(jù)某個(多個)字段劃分為不同的群體(group)進行分析,如電商領(lǐng)域?qū)⑷珖目備N售額根據(jù)省份進行劃分,分析各省銷售額的變化情況,社交領(lǐng)域?qū)⒂脩舾鶕?jù)畫像(性別、年齡)進行細分,研究用戶的使用情況和偏好等。在Pandas中,上述的數(shù)據(jù)處理操作主要運用groupby完成,這篇文章就介紹一下groupby的基本原理及對應(yīng)的agg、transform和apply操作。
為了后續(xù)圖解的方便,采用模擬生成的10個樣本數(shù)據(jù),代碼和數(shù)據(jù)如下:
45.1 Groupby的基本原理
在Pandas中,實現(xiàn)分組操作的代碼很簡單,僅需一行代碼,在這里,將上面的數(shù)據(jù)集按照company字段進行劃分:
將上述代碼輸入ipython后,會得到一個DataFrameGroupBy對象
那這個生成的DataFrameGroupBy是啥呢?對data進行了groupby后發(fā)生了什么?ipython所返回的結(jié)果是其內(nèi)存地址,并不利于直觀地理解,為了看看group內(nèi)部究竟是什么,這里把group轉(zhuǎn)換成list的形式來看一看:
轉(zhuǎn)換成列表的形式后,可以看到,列表由三個元組組成,每個元組中,第一個元素是組別(這里是按照company進行分組,所以最后分為了A,B,C),第二個元素的是對應(yīng)組別下的DataFrame,整個過程可以圖解如下:
總結(jié)來說,groupby的過程就是將原有的DataFrame按照groupby的字段(這里是company),劃分為若干個分組DataFrame,被分為多少個組就有多少個分組DataFrame。所以說,在groupby之后的一系列操作(如agg、apply等),均是基于分組DataFrame的操作。理解了這點,也就基本摸清了Pandas中g(shù)roupby操作的主要原理。下面來講講groupby之后的常見操作。
45.2 agg分組聚合
聚合操作是groupby后常見的操作,會寫SQL的朋友對此應(yīng)該是非常熟悉了。聚合操作可以用來求和、均值、最大值、最小值等,下面的表格列出了Pandas中常見的聚合操作。
針對樣例數(shù)據(jù)集,如果我想計算不同公司員工的平均年齡和平均薪水,可以按照下方的代碼進行:
如果想對針對不同的列求不同的值,比如要計算不同公司員工的平均年齡以及薪水的中位數(shù),可以利用字典指定進行聚合操作:
45.3 transform
transform是一種什么數(shù)據(jù)操作?和agg有什么區(qū)別呢?為了更好地理解transform和agg的不同,下面從實際的應(yīng)用場景出發(fā)進行對比。
在上面的agg中,我們學(xué)會了如何求不同公司員工的平均薪水,如果現(xiàn)在需要在原數(shù)據(jù)集中新增一列avg_salary,代表員工所在的公司的平均薪水(相同公司的員工具有一樣的平均薪水),該怎么實現(xiàn)呢?如果按照正常的步驟來計算,需要先求得不同公司的平均薪水,然后按照員工和公司的對應(yīng)關(guān)系填充到對應(yīng)的位置,不用transform的話,實現(xiàn)代碼如下:
如果使用transform的話,僅需要一行代碼:
還是以圖解的方式來看看進行g(shù)roupby后transform的實現(xiàn)過程(為了更直觀展示,圖中加入了company列,實際按照上面的代碼只有salary列):
圖中的大方框是transform和agg所不一樣的地方,對agg而言,會計算得到A,B,C公司對應(yīng)的均值并直接返回,但對transform而言,則會對每一條數(shù)據(jù)求得相應(yīng)的結(jié)果,同一組內(nèi)的樣本會有相同的值,組內(nèi)求完均值后會按照原索引的順序返回結(jié)果,如果有不理解的可以拿這張圖和agg那張對比一下。
45.4 apply
apply應(yīng)該是大家的老朋友了,它相比agg和transform而言更加靈活,能夠傳入任意自定義的函數(shù),實現(xiàn)復(fù)雜的數(shù)據(jù)操作。在Pandas數(shù)據(jù)處理三板斧,你會幾板?中,介紹了apply的使用,那在groupby后使用apply和之前所介紹的有什么區(qū)別呢?
區(qū)別是有的,但是整個實現(xiàn)原理是基本一致的。兩者的區(qū)別在于,對于groupby后的apply,以分組后的分組DataFrame作為參數(shù)傳入指定函數(shù)的,基本操作單位是DataFrame,而之前介紹的apply的基本操作單位是Series。還是以一個案例來介紹groupby后的apply用法。
假設(shè)我現(xiàn)在需要獲取各個公司年齡最大的員工的數(shù)據(jù),該怎么實現(xiàn)呢?可以用以下代碼實現(xiàn):
46 Pandas數(shù)據(jù)處理三板斧,map、apply和applymap
46.1 Series數(shù)據(jù)處理
46.1.1 map
數(shù)據(jù)集如下所示,各列分別代表身高、體重、是否吸煙、性別、年齡和膚色。
如果需要把數(shù)據(jù)集中g(shù)ender列的男替換為1,女替換為0,怎么做呢?絕對不是用for循環(huán)實現(xiàn)!!!使用Series.map()可以很容易做到,最少僅需一行代碼。
兩種方法實現(xiàn)
使用字典映射
使用函數(shù)
那map在實際過程中是怎么運行的呢?請看下面的圖解(為了方便展示,僅截取了前10條數(shù)據(jù))
不論是利用字典還是函數(shù)進行映射,map方法都是把對應(yīng)的數(shù)據(jù)逐個當作參數(shù)傳入到字典或函數(shù)中,得到映射后的值。
46.1.2 apply
同時Series對象還有apply方法,apply方法的作用原理和map方法類似,區(qū)別在于apply能夠傳入功能更為復(fù)雜的函數(shù)。怎么理解呢?一起看看下面的例子。
假設(shè)在數(shù)據(jù)統(tǒng)計的過程中,年齡age列有較大誤差,需要對其進行調(diào)整(加上或減去一個值),由于這個加上或減去的值未知,故在定義函數(shù)時,需要加多一個參數(shù)bias,此時用map方法是操作不了的(傳入map的函數(shù)只能接收一個參數(shù)),apply方法則可以解決這個問題。
可以看到age列都減了3,當然,這里只是簡單舉了個例子,當需要進行復(fù)雜處理時,更能體現(xiàn)apply的作用。
總而言之,對于Series而言,map可以解決絕大多數(shù)的數(shù)據(jù)處理需求,但如果需要使用較為復(fù)雜的函數(shù),則需要用到apply方法。
46.2 Serie和DataFrame的區(qū)別
46.3 DataFrame數(shù)據(jù)處理
46.3.1 apply
對DataFrame而言,apply是非常重要的數(shù)據(jù)處理方法,它可以接收各種各樣的函數(shù)(Python內(nèi)置的或自定義的),處理方式很靈活,下面通過幾個例子來看看apply的具體使用及其原理。
在進行具體介紹之前,首先需要介紹一下DataFrame中axis的概念,在DataFrame對象的大多數(shù)方法中,都會有axis這個參數(shù),它控制了你指定的操作是沿著0軸還是1軸進行。axis=0代表操作對列columns進行,axis=1代表操作對行row進行,如下圖所示。
如果還不是很了解,沒關(guān)系,下面會分別對apply沿著0軸以及1軸的操作進行講解,繼續(xù)往下走。
假設(shè)現(xiàn)在需要對data中的數(shù)值列分別進行取對數(shù)和求和的操作,這時可以用apply進行相應(yīng)的操作,因為是對列進行操作,所以需要指定axis=0,使用下面的兩行代碼可以很輕松地解決我們的問題。
實現(xiàn)的方式很簡單,但調(diào)用apply時究竟發(fā)生了什么呢?過程是怎么實現(xiàn)的?還是通過圖解的方式來一探究竟。(取前五條數(shù)據(jù)為例)
當沿著軸0(axis=0)進行操作時,會將各列(columns)默認以Series的形式作為參數(shù),傳入到你指定的操作函數(shù)中,操作后合并并返回相應(yīng)的結(jié)果。
那如果在實際使用中需要按行進行操作(axis=1),那整個過程又是怎么實現(xiàn)的呢?
在數(shù)據(jù)集中,有身高和體重的數(shù)據(jù),所以根據(jù)這個,我們可以計算每個人的BMI指數(shù)(體檢時常用的指標,衡量人體肥胖程度和是否健康的重要標準),計算公式是:體重指數(shù)BMI=體重/身高的平方(國際單位kg/㎡),因為需要對每個樣本進行操作,這里使用axis=1的apply進行操作,代碼如下:
還是用圖解的方式來看看這個過程到底是怎么實現(xiàn)的(以前5條數(shù)據(jù)為例)。
當apply設(shè)置了axis=1對行進行操作時,會默認將每一行數(shù)據(jù)以Series的形式(Series的索引為列名)傳入指定函數(shù),返回相應(yīng)的結(jié)果。
總結(jié)一下對DataFrame的apply操作:
當axis=0時,對每列columns執(zhí)行指定函數(shù);當axis=1時,對每行row執(zhí)行指定函數(shù)。
無論axis=0還是axis=1,其傳入指定函數(shù)的默認形式均為Series,可以通過設(shè)置raw=True傳入numpy數(shù)組。
對每個Series執(zhí)行結(jié)果后,會將結(jié)果整合在一起返回(若想有返回值,定義函數(shù)時需要return相應(yīng)的值)
當然,DataFrame的apply和Series的apply一樣,也能接收更復(fù)雜的函數(shù),如傳入?yún)?shù)等,實現(xiàn)原理是一樣的,具體用法詳見官方文檔。
46.3.2 applymap
applymap的用法比較簡單,會對DataFrame中的每個單元格執(zhí)行指定函數(shù)的操作,雖然用途不如apply廣泛,但在某些場合下還是比較有用的,如下面這個例子。
為了演示的方便,新生成一個DataFrame
47 pickle
47.1 pickle保存
pickle 是一個 python 中, 壓縮/保存/提取 文件的模塊. 最一般的使用方式非常簡單. 比如下面就是壓縮并保存一個字典的方式. 字典和列表都是能被保存的.
wb 是以寫的形式打開 ‘pickle_example.pickle’ 這個文件, 然后 pickle.dump 你要保存的東西去這個打開的 file. 最后關(guān)閉 file 你就會發(fā)現(xiàn)你的文件目錄里多了一個 ‘pickle_example.pickle’文件, 這就是那個字典了
47.2 pickle提取
提取的時候相對簡單點, 同樣我們以讀的形式打開那個文件, 然后 load 進一個 python 的變量.
48 Python字典的get()用法
作用
Python中的字典(Dictionary)是以鍵值對的形式存儲數(shù)據(jù)的,get()方法可以返回指定鍵的值,如果該鍵不存在的話,返回默認值。
語法
dict.get(key, default=None)
參數(shù)
key:需要查找的鍵。
default:如果查找的鍵不存在的話,返回default的值。默認為None。
和dict[key]的區(qū)別
dict.get(key)和dict[key]在key值存在的情況下,都能得到對應(yīng)的鍵值。但是當使用dict[key]時,key必須要存在,否則會報錯。但是dict.get[key]中的key可以不存在,因為get方法有一個默認的參數(shù)None,當key不存在的時候,返回None。
49 統(tǒng)計一個數(shù)組的詞頻,并取前10個
總結(jié)
以上是生活随笔為你收集整理的python数据处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql dump hbase_mys
- 下一篇: 燃气热水器暗管怎么留(华润燃气欢迎您)