主要是文本、格式以及臟數(shù)據(jù)的清洗和轉換。很多數(shù)據(jù)并不是直接拿來就能用的,需要經(jīng)過數(shù)據(jù)分析人員的清理。數(shù)據(jù)越多,這個步驟花費的時間越長。
十余年的洛陽網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調整洛陽建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“洛陽網(wǎng)站設計”,“洛陽網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
1、Trim
作用:清除掉字符串兩邊的空格
mysql有同名函數(shù),py有近似函數(shù)strip
2、concatenate
合并單元格的內容,當然還有另外一種合并方式是。
‘天’‘氣’‘好’=天氣好。
當合并內容過多是,concatenate的效率高。
mysql有近似函數(shù)concat。
3、replace
作用:替換掉單元格的字符串。
mysql和Python中都有同名函數(shù)。
4、Substitute
和replace功能接近,區(qū)別在于,該替換是全局替換,沒有起始位置的概念。
5、left/right/mid
作用:截取字符串中的字符。
mysql中有同名函數(shù)
6、Len/Lenb
返回字符串的長度,在len中,中文計算為一個,在lenb中,中文計算為兩個。
Mysql和python中有同名函數(shù)。
7、Find
查找某字符出現(xiàn)的位置,可以指定為第幾次出現(xiàn),與left/right/mid結合能完成簡單的文本提取。
mysql中有近似函數(shù)find_in_set,python中有同名函數(shù)。
8、search
和find類似,區(qū)別是search大小寫不敏感,但支持*通配符。
9、Text
將數(shù)值轉化為指定的文本格式,可以和時間序列函數(shù)一起看。
在進行多表關聯(lián)或者行列對比時用到的函數(shù),越復雜的表用的越多,但良好的表習慣可以減少這類函數(shù)的使用。
1、lookup
最被忽略的函數(shù),功能性和vlookup一樣,但是引申有數(shù)組匹配和二分法。
2、vlookup
3、index
和match組合,媲美vlookup,但是功能更強大。
4、match
5、row
返回單元格所在的行
6、column
返回單元格所在的列
7、offset
建立坐標系,以坐標系為原點,返回距離原點的值或者區(qū)域。正數(shù)代表向下或向左,負數(shù)則相反。
在進行數(shù)據(jù)處理時,如果數(shù)據(jù)簡單,數(shù)量不多,excel是大家的首選。但是當數(shù)據(jù)眾多,類型復雜,需要靈活地顯示切片、進行索引、以及排序時,python會更加方便。借助python中的numpy和pandas庫,它能快速完成各種任務,包括數(shù)據(jù)的創(chuàng)建、檢查、清洗、預處理、提取、篩選、匯總、統(tǒng)計等。接下來幾篇文章,將以excel為參照,介紹python中數(shù)據(jù)的處理。
提到pandas,那就不得不提兩類重要的數(shù)據(jù)結構,Series和DataFrame,這兩類數(shù)據(jù)結構都是建立在numpy的數(shù)組array基礎上。與array相比,Series是一個一維的數(shù)據(jù)集,但是每個數(shù)據(jù)元素都帶有一個索引,有點類似于字典。而DataFrame在數(shù)組的基礎上,增加了行索引和列索引,類似于Series的字典,或者說是一個列表集。
所以在數(shù)據(jù)處理前,要安裝好numpy , pandas。接下來就看看如何完成一套完整的數(shù)據(jù)操作。
創(chuàng)建數(shù)據(jù)表的方法分兩種,分別是從外部導入數(shù)據(jù),以及直接寫入數(shù)據(jù)。
在python中,也可外部導入xlsx格式文件,使用read_excel()函數(shù):
import pandas as pd
from pandas import DataFrame,Series
data=DataFrame(pd.read_excel('c:/python27/test.xlsx'))
print data
輸出:
Gene Size Function
0 arx1 411 NaN
1 arx2 550 monooxygenase
2 arx3 405 aminotransferase
……
即:調用pandas中read_excel屬性,來讀取文件test.xlsx,并轉換成DataFrame格式,賦給變量data。在每一行后,自動分了一個索引值。除了excel,還支持以下格式文件的導入和寫入:
Python寫入的方法有很多,但還是不如excel方便。常用的例如使用相等長度的字典或numpy數(shù)組來創(chuàng)建:
data1 = DataFrame(
{'Gene':['arx1','arx2','arx3'],
'Size':[411,550,405],
'Func':[np.NaN,'monooxygenase','aminotransferase ']})
print data1
輸出
Func Gene Size
0 NaN arx1 411
1 monooxyg arx2 550
2 amino arx3 405
分配一個行索引后,自動排序并輸出。
在python中,可以使用info()函數(shù)查看整個數(shù)據(jù)的詳細信息。
print data.info()
輸出
RangeIndex: 7 entries, 0 to 6
Data columns (total 3 columns):
Gene 7 non-null object
Size 7 non-null int64
Function 5 non-null object
dtypes: int64(1), object(2)
memory usage: 240.0+ bytes
None
此外,還可以通過shape, column, index, values, dtypes等函數(shù)來查看數(shù)據(jù)維度、行列組成、所有的值、 數(shù)據(jù)類型:
print data1.shape
print data1.index
print data1.columns
print data1.dtypes
輸出
(3, 3)
RangeIndex(start=0, stop=3, step=1)
Index([u'Func', u'Gene', u'Size'], dtype='object')
Func object
Gene object
Size int64
dtype: object
在excel中可以按“F5”,在“定位條件”中選擇“空值”,選中后,輸入替換信息,再按“Ctrl+Enter”即可完成替換。
在python中,使用函數(shù) isnull 和 notnull 來檢測數(shù)據(jù)丟失, 包含空值返回True,不包含則返回False。
pd.isnull(data1)
pd.notnull(data1)
也可以使用函數(shù)的實例方法,以及加入?yún)?shù),對某一列進行檢查:
print data1['Func'].isnull()
輸出
Func Gene Size
0 True False False
1 False False False
2 False False False
再使用fillna對空值進行填充:
data.fillna(value=0)
#用0來填充空值
data['Size'].fillna(data1['Size'].mean())
#用data1中Size列的平均值來填充空值
data['Func']=data['Func'].map(str.strip)
#清理Func列中存在的空格
Excel中可以按“Ctrl+F”,可調出替換對話框,替換相應數(shù)據(jù)。
Python中,使用replace函數(shù)替換:
data['Func'].replace('monooxygenase', 'oxidase')
將Func列中的'monooxygenase'替換成'oxidase'。
Excel中,通過“數(shù)據(jù)-篩選-高級”可以選擇性地看某一列的唯一值。
Python中,使用unique函數(shù)查看:
print data['Func'].unique()
輸出
[nan u'monooxygenase' u'aminotransferase' u'methyltransferase']
Excel中,通過UPPER、LOWER、PROPER等函數(shù)來變成大寫、小寫、首字母大寫。
Python中也有同名函數(shù):
data1['Gene'].str.lower()
Excel中可以通過“數(shù)據(jù)-刪除重復項”來去除重復值。
Python中,可以通過drop_duplicates函數(shù)刪除重復值:
print data['Func'].drop_duplicates()
輸出
0 NaN
1 monooxygenase
2 aminotransferase
3 methyltransferase
Name: Func, dtype: object
還可以設置“ keep=’last’ ”參數(shù),后出現(xiàn)的被保留,先出現(xiàn)的被刪除:
print data['Func'].drop_duplicates(keep='last')
輸出
2 aminotransferase
3 methyltransferase
6 monooxygenase
8 NaN
Name: Func, dtype: object
內容參考:
Python For Data Analysis
藍鯨網(wǎng)站分析博客,作者藍鯨(王彥平)
你好,請看下面的例子和說明:python中類的初始化方法是__init__(),因此父類子類的初始化方法都是這個,如果子類不實現(xiàn)這個函數(shù),初始化時調用父類的初始化函數(shù),如果子類實現(xiàn)這個函數(shù),就覆蓋了父類的這個函數(shù),既然繼承父類,就要在這個函數(shù)里顯式調用一下父類的__init__(),這跟C++,jAVA不一樣,他們是自動調用父類初始化函數(shù)的。調用父類函數(shù)有以下方法:class A:def method(self, arg):pass class B(A):def method(self, arg):# A.method(self,arg) # 1# super(B, self).method(arg) #2super().method(arg) #31.直接寫類名調用2.用super(type,obj).method(arg)方法調用。3.在類定義中調用本類的父類方法,可以直接super().method(arg).在代碼中調用對象的父類的方法的示例:ob = B()super(B,ob).method(arg) #調用class B的父類class A的method。初始化中調用父類初始化方法示例:class B(A):
一、函數(shù)的定義
函數(shù)是指將一組語句的集合通過一個名字(函數(shù)名)封裝起來,想要執(zhí)行這個函數(shù),只需要調用函數(shù)名即可
特性:
減少重復代碼
使程序變得可擴展
使程序變得易維護
二、函數(shù)的參數(shù)
2.1、形參和實參數(shù)
形參,調用時才會存在的值
實慘,實際存在的值
2.2、默認參數(shù)
定義:當不輸入?yún)?shù)值會有一個默認的值,默認參數(shù)要放到最后
2.3、 關鍵參數(shù)
定義: 正常情況下,給函數(shù)傳參數(shù)要安裝順序,不想按順序可以用關鍵參數(shù),只需要指定參數(shù)名即可,(指定了參數(shù)名的就叫關鍵參數(shù)),但是要求是關鍵參數(shù)必須放在位置參數(shù)(以位置順序確定對應的參數(shù))之后
2.4、非固定參數(shù)
定義: 如你的函數(shù)在傳入?yún)?shù)時不確定需要傳入多少個參數(shù),就可以使用非固定參數(shù)
# 通過元組形式傳遞
# 通過列表形式傳遞
# 字典形式(通過k,value的方式傳遞)
# 通過變量的方式傳遞
三、函數(shù)的返回值
作用:
返回函數(shù)執(zhí)行結果,如果沒有設置,默認返回None
終止函數(shù)運行,函數(shù)遇到return終止函數(shù)
四、變量的作用域
全局變量和局部變量
在函數(shù)中定義的變量叫局部變量,在程序中一開始定義的變量叫全局變量
全局變量作用域整個程序,局部變量作用域是定義該變量的函數(shù)
當全局變量與局部變量同名是,在定義局部變量的函數(shù)內,局部變量起作用,其他地方全局變量起作用
同級的局部變量不能互相調用
想要函數(shù)里邊的變量設置成全局變量,可用global進行設置
五、特殊函數(shù)
5.1、嵌套函數(shù)
定義: 嵌套函數(shù)顧名思義就是在函數(shù)里邊再嵌套一層函數(shù)
提示 在嵌套函數(shù)里邊調用變量是從里往外依次調用,意思就是如果需要調用的變量在當前層沒有就會去外層去調用,依次內推
匿名函數(shù)
基于Lambda定義的函數(shù)格式為: lambda 參數(shù):函數(shù)體
參數(shù),支持任意參數(shù)。
匿名函數(shù)適用于簡單的業(yè)務處理,可以快速并簡單的創(chuàng)建函數(shù)。
# 與三元運算結合
5.3、高階函數(shù)
定義:變量可以指向函數(shù),函數(shù)的參數(shù)可以接收變量,那么一個函數(shù)就可以接收另一個函數(shù)作為參數(shù),這種函數(shù)稱之為高階函數(shù) 只需要滿足一下任意一個條件,即是高階函數(shù)
接收一個或多個函數(shù)作為輸入
return返回另一個函數(shù)
5.4、遞歸函數(shù)
定義:一個函數(shù)可以調用其他函數(shù),如果一個函數(shù)調用自己本身,這個函數(shù)就稱為遞歸函數(shù)
在默認情況下Python最多能遞歸1000次,(這樣設計師是為了防止被內存被撐死)可以通過sys.setrecursionlimit(1500)進行修改
遞歸實現(xiàn)過程是先一層一層的進,然后在一層一層的出來
必須有一個明確的條件結束,要不然就是一個死循環(huán)了
每次進入更深層次,問題規(guī)模都應該有所減少
遞歸執(zhí)行效率不高,遞歸層次過多會導致站溢出
# 計算4的階乘 4x3x2x1
# 打印數(shù)字從1-100
5.5、閉包現(xiàn)象
定義:內層函數(shù)調用外層函數(shù)的變量,并且內存函數(shù)被返回到外邊去了
閉包的意義:返回的函數(shù)對象,不僅僅是一個函數(shù)對象,在該函數(shù)外還包裹了一層作用域,這使得,該函數(shù)無論在何處調用,優(yōu)先使用自己外層包裹的作用域
【@】符號在python中是裝飾器的意思。
裝飾器對一個可調用對象(函數(shù)、方法、類等等)進行裝飾,它返回的也是一個可調用對象。
一般情況下,裝飾器是對被裝飾對象的修飾與增強。用現(xiàn)實事物類比的話,可以類比為中間商:中間商不生產(chǎn)產(chǎn)品,它將工廠生產(chǎn)的產(chǎn)品進行包裝、運輸后再銷售給顧客。裝飾器不實現(xiàn)核心功能,它提供對目標函數(shù)調用的封裝與強。
它裝飾的方法返回值是一個對象(BillList、Bill、List[BillDetail]等),而裝飾器【enabled_cache】的作用如它的名稱一樣:使用緩存。可以看到,這個裝飾器函數(shù)中定義了一個函數(shù)【wrapper】然后將這個wrapper作為返回值。這樣,原本調用ProductionBos.bill_with_last_week的代碼就不需要做任何改變就能享受到ProductionBos.bill_with_last_week原有的功能(得到一個BillList對象)和enabled_cache提供的附加功能(如果該對象有緩存,就不再從數(shù)據(jù)庫查詢)。
Python內置函數(shù)有很多,為大家推薦5個神仙級的內置函數(shù):
(1)Lambda函數(shù)
用于創(chuàng)建匿名函數(shù),即沒有名稱的函數(shù)。它只是一個表達式,函數(shù)體比def簡單很多。當我們需要創(chuàng)建一個函數(shù)來執(zhí)行單個操作并且可以在一行中編寫時,就可以用到匿名函數(shù)了。
Lamdba的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。
利用Lamdba函數(shù),往往可以將代碼簡化許多。
(2)Map函數(shù)
會將一個函數(shù)映射到一個輸入列表的所有元素上,比如我們先創(chuàng)建了一個函數(shù)來返回一個大寫的輸入單詞,然后將此函數(shù)應有到列表colors中的所有元素。
我們還可以使用匿名函數(shù)lamdba來配合map函數(shù),這樣可以更加精簡。
(3)Reduce函數(shù)
當需要對一個列表進行一些計算并返回結果時,reduce()是個非常有用的函數(shù)。舉個例子,當需要計算一個整數(shù)列表所有元素的乘積時,即可使用reduce函數(shù)實現(xiàn)。
它與函數(shù)的最大的區(qū)別就是,reduce()里的映射函數(shù)(function)接收兩個參數(shù),而map接收一個參數(shù)。
(4)enumerate函數(shù)
用于將一個可遍歷的數(shù)據(jù)對象(如列表、元組或字符串)組合為一個索引序列,同時列出數(shù)據(jù)和數(shù)據(jù)下標,一般用在for循環(huán)當中。
它的兩個參數(shù),一個是序列、迭代器或其他支持迭代對象;另一個是下標起始位置,默認情況從0開始,也可以自定義計數(shù)器的起始編號。
(5)Zip函數(shù)
用于將可迭代的對象作為參數(shù),將對象中對應的元素打包成一個個元組,然后返回由這些元組組成的列表
當我們使用zip()函數(shù)時,如果各個迭代器的元素個數(shù)不一致,則返回列表長度與最短的對象相同。