摘要:數(shù)據(jù)清洗大家好,這一期我將為大家?guī)?lái)我的學(xué)習(xí)心得第二期數(shù)據(jù)清理。這一期我會(huì)和大家分享一些比較好用常見(jiàn)的清洗方法。首先還是讓我們來(lái)簡(jiǎn)單看一下本文將會(huì)用到的數(shù)據(jù)源這是一個(gè)超小型的房地產(chǎn)行業(yè)的數(shù)據(jù)集,大家會(huì)在文章最后找到下載地址。
數(shù)據(jù)清洗
大家好,這一期我將為大家?guī)?lái)我的pandas學(xué)習(xí)心得第二期:數(shù)據(jù)清理。這一步非常重要,一般在獲取數(shù)據(jù)源之后,我們緊接著就要開(kāi)始這一步,以便為了之后的各種操作,簡(jiǎn)單來(lái)說(shuō),我們的目標(biāo)就是讓數(shù)據(jù)看起來(lái)賞心悅目,規(guī)規(guī)矩矩的,所以我們會(huì)對(duì)原始的dataframe做一些必要的美容,包括規(guī)范命名,去除異常值,重新選擇合適的index啊,處理缺失值,統(tǒng)一列的命名等等。
這一期我會(huì)和大家分享一些比較好用常見(jiàn)的清洗方法。首先還是讓我們來(lái)簡(jiǎn)單看一下本文將會(huì)用到的數(shù)據(jù)源:
property_data.csv 這是一個(gè)超小型的房地產(chǎn)行業(yè)的數(shù)據(jù)集,大家會(huì)在文章最后找到下載地址。
這篇文章我會(huì)從以下幾個(gè)方面來(lái)和大家分享我的心得體會(huì):
有關(guān)缺失值的處理
有關(guān)列的處理
設(shè)置Index
源碼及數(shù)據(jù)下載地址
1.有關(guān)缺失值的處理這里我們會(huì)用到 property_data.csv這個(gè)數(shù)據(jù)集,在開(kāi)始處理缺失值之前,我們可以先話一分鐘仔細(xì)想想,為什么實(shí)際生活中的數(shù)據(jù)從來(lái)是不完整的,原因基本有幾個(gè)方面:
用戶忘記填寫字段
從舊數(shù)據(jù)庫(kù)手動(dòng)傳輸時(shí)數(shù)據(jù)丟失
代碼中有bug
用戶不填寫非必須字段(比如注冊(cè)的時(shí)候)
因?yàn)檫@些原因,我每次在處理missing value的時(shí)候都會(huì)問(wèn)自己兩個(gè)基礎(chǔ)問(wèn)題:
數(shù)據(jù)集每一列有什么特點(diǎn)?
我們想要在處理后得到什么類型的數(shù)據(jù)(int,float,string,boolean)?
帶著這些疑問(wèn),我們可以開(kāi)始了,首先讓我們簡(jiǎn)單讀取一下數(shù)據(jù),利用head函數(shù)看看前5行,如果你還對(duì)pandas的基礎(chǔ)知識(shí)有疑問(wèn),可以看看我上一篇文章:Pandas之旅(一): 讓我們把基礎(chǔ)知識(shí)一次擼完,申精干貨
import pandas as pd import numpy as np import os os.chdir("F:Python教程segmentfaultpandas_sharePandas之旅_02 數(shù)據(jù)清洗")
# Read csv file into a pandas dataframe df = pd.read_csv("property_data.csv") # Take a look at the first few rows df.head()
PID | ST_NUM | ST_NAME | OWN_OCCUPIED | NUM_BEDROOMS | NUM_BATH | SQ_FT | |
---|---|---|---|---|---|---|---|
0 | 100001000.0 | 104.0 | PUTNAM | Y | 3 | 1 | 1000 |
1 | 100002000.0 | 197.0 | LEXINGTON | N | 3 | 1.5 | -- |
2 | 100003000.0 | NaN | LEXINGTON | N | NaN | 1 | 850 |
3 | 100004000.0 | 201.0 | BERKELEY | 12 | 1 | NaN | 700 |
4 | NaN | 203.0 | BERKELEY | Y | 3 | 2 | 1600 |
現(xiàn)在讓我們看看數(shù)據(jù)的一些關(guān)鍵列是什么:
ST_NUM:街道號(hào)碼
ST_NAME: 街道名稱
OWN_OCCUPIED: 是否用于自住
NUM_BEDROOMS:臥室數(shù)量
SQ_FT:面積
這里可以給大家普及點(diǎn)房地產(chǎn)知識(shí),有的時(shí)候房屋用途被明確規(guī)定,比如有的房產(chǎn)寫的是"owner occupied only ")意思是說(shuō)如果你買了,那這個(gè)房子會(huì)成為你的主要住所,不能用于出租之類的,簡(jiǎn)單理解就是自住
所以現(xiàn)在我可以自問(wèn)自答第一個(gè)問(wèn)題:數(shù)據(jù)集每一列有什么特點(diǎn)?
ST_NUM:float或int ...
ST_NAME:string
OWN_OCCUPIED:string ... Y(“是”)或N(“否”)
NUM_BEDROOMS:float或int,數(shù)字類型
SQ_FT:float或int,數(shù)字類型
1.1 規(guī)范的缺失值標(biāo)記現(xiàn)在讓我們關(guān)注ST_NUM這一列:
# Looking at the ST_NUM column df["ST_NUM"]
0 104.0 1 197.0 2 NaN 3 201.0 4 203.0 5 207.0 6 NaN 7 213.0 8 215.0 Name: ST_NUM, dtype: float64
如果想查看該列的缺失值情況,我們可以利用isnull()方法,如果出現(xiàn)缺失值,會(huì)返回True,反之返回false
df["ST_NUM"].isnull()
0 False 1 False 2 True 3 False 4 False 5 False 6 True 7 False 8 False Name: ST_NUM, dtype: bool
但是其實(shí)如果我們打開(kāi)csv文件,你會(huì)發(fā)現(xiàn)第3行是空白,還有一行在該列顯示的是NA,所以結(jié)論已經(jīng)有了:在pandas里表示缺省值的符號(hào)及時(shí)NA,換句話說(shuō),如果我們要表示缺省值,標(biāo)準(zhǔn)寫法是NA
1.2 不規(guī)范的缺失值標(biāo)記同樣的,這回讓我們關(guān)注一下NUM_BEDROOMS這一列,我們發(fā)現(xiàn)出現(xiàn)了4種類型的表達(dá)缺省值的標(biāo)記:
n/a
NA
—
na
通過(guò)剛才的實(shí)踐,我們已經(jīng)確定NA是pandas可以識(shí)別的,那么其他的符號(hào)呢,現(xiàn)在讓我們來(lái)測(cè)試一下
df["NUM_BEDROOMS"]
0 3 1 3 2 NaN 3 1 4 3 5 NaN 6 2 7 1 8 na Name: NUM_BEDROOMS, dtype: object
df["NUM_BEDROOMS"].isnull()
0 False 1 False 2 True 3 False 4 False 5 True 6 False 7 False 8 False Name: NUM_BEDROOMS, dtype: bool
可以看到pandas識(shí)別了n/a 和NA兩種符號(hào),但是接下來(lái)我們要考慮一個(gè)問(wèn)題,假設(shè)你是房地產(chǎn)公司的地區(qū)總經(jīng)理,你每周會(huì)收到不同地區(qū)的負(fù)責(zé)人提交的表格,
這些人中有的喜歡用--表示空白值,有的人喜歡用na,那應(yīng)該怎么辦?
最簡(jiǎn)單的方式就是將所有表示空白值的符號(hào)統(tǒng)一放在list中,讓后讓pandas一次性識(shí)別:
# Making a list of missing value types missing_values = ["na", "--"] df = pd.read_csv("property_data.csv", na_values = missing_values)
現(xiàn)在我們來(lái)看看到底發(fā)生了什么?
df
PID | ST_NUM | ST_NAME | OWN_OCCUPIED | NUM_BEDROOMS | NUM_BATH | SQ_FT | |
---|---|---|---|---|---|---|---|
0 | 100001000.0 | 104.0 | PUTNAM | Y | 3.0 | 1 | 1000.0 |
1 | 100002000.0 | 197.0 | LEXINGTON | N | 3.0 | 1.5 | NaN |
2 | 100003000.0 | NaN | LEXINGTON | N | NaN | 1 | 850.0 |
3 | 100004000.0 | 201.0 | BERKELEY | 12 | 1.0 | NaN | 700.0 |
4 | NaN | 203.0 | BERKELEY | Y | 3.0 | 2 | 1600.0 |
5 | 100006000.0 | 207.0 | BERKELEY | Y | NaN | 1 | 800.0 |
6 | 100007000.0 | NaN | WASHINGTON | NaN | 2.0 | HURLEY | 950.0 |
7 | 100008000.0 | 213.0 | TREMONT | Y | 1.0 | 1 | NaN |
8 | 100009000.0 | 215.0 | TREMONT | Y | NaN | 2 | 1800.0 |
我們可以發(fā)現(xiàn)只要missing_value中記錄的表達(dá)空白值的符號(hào),全部變成了規(guī)整的NaN
1.3 類型不一致的異常值剛剛我們已經(jīng)簡(jiǎn)單了解了在pandas中如何處理缺失值的,還有一種情況,讓我們來(lái)看OWN_OCCUPIED這一列,這一列的答案只能是Y,N 但是我們發(fā)現(xiàn)數(shù)據(jù)集意外地出現(xiàn)了12,屬于類型不對(duì)稱
df["OWN_OCCUPIED"].isnull()
0 False 1 False 2 False 3 False 4 False 5 False 6 True 7 False 8 False Name: OWN_OCCUPIED, dtype: bool
現(xiàn)在我們發(fā)現(xiàn)12是異常值,因?yàn)樗穷愋湾e(cuò)誤,所以我們可以簡(jiǎn)單通過(guò)下面這個(gè)方法來(lái)檢測(cè),
# Detecting numbers cnt=0 for row in df["OWN_OCCUPIED"]: try: int(row) df.loc[cnt, "OWN_OCCUPIED"]=np.nan except ValueError: pass cnt+=1
我們這里的策略是:
循環(huán)遍歷OWN_OCCUPIED列
嘗試將條目轉(zhuǎn)換為整數(shù)
如果條目可以更改為整數(shù),請(qǐng)輸入缺失值
如果數(shù)字不能是整數(shù),我們知道它是一個(gè)字符串,所以繼續(xù)
這樣我們會(huì)把OWN_OCCUPIED這一列中所有類型不對(duì)的值轉(zhuǎn)化為NaN,現(xiàn)在來(lái)看結(jié)果:
df["OWN_OCCUPIED"]
0 Y 1 N 2 N 3 NaN 4 Y 5 Y 6 NaN 7 Y 8 Y Name: OWN_OCCUPIED, dtype: object1.4 匯總?cè)笔е?/b>
pandas提供了更為簡(jiǎn)潔的方式,可以讓我們整體了解所有column的空值:
df.isnull().sum()
PID 1 ST_NUM 2 ST_NAME 0 OWN_OCCUPIED 2 NUM_BEDROOMS 3 NUM_BATH 1 SQ_FT 2 dtype: int64
或者如果我們只想知道數(shù)據(jù)是否存在空值,那么可以使用以下的命令:
# Any missing values? df.isnull().values.any()
True1.5 替換缺失值
如果我們想要替換掉缺失值,可以用fillna方法
# Replace missing values with a number df["ST_NUM"].fillna(125, inplace=True)
或者我們可以通過(guò)準(zhǔn)確定位來(lái)替換缺失值:
# Location based replacement df.loc[2,"ST_NUM"] = 125
替換缺失值的一種非常常見(jiàn)的方法是使用中位數(shù):
# Replace using median median = df["NUM_BEDROOMS"].median() df["NUM_BEDROOMS"].fillna(median, inplace=True) df
PID | ST_NUM | ST_NAME | OWN_OCCUPIED | NUM_BEDROOMS | NUM_BATH | SQ_FT | |
---|---|---|---|---|---|---|---|
0 | 100001000.0 | 104.0 | PUTNAM | Y | 3.0 | 1 | 1000.0 |
1 | 100002000.0 | 197.0 | LEXINGTON | N | 3.0 | 1.5 | NaN |
2 | 100003000.0 | 125.0 | LEXINGTON | N | 2.5 | 1 | 850.0 |
3 | 100004000.0 | 201.0 | BERKELEY | NaN | 1.0 | NaN | 700.0 |
4 | NaN | 203.0 | BERKELEY | Y | 3.0 | 2 | 1600.0 |
5 | 100006000.0 | 207.0 | BERKELEY | Y | 2.5 | 1 | 800.0 |
6 | 100007000.0 | 125.0 | WASHINGTON | NaN | 2.0 | HURLEY | 950.0 |
7 | 100008000.0 | 213.0 | TREMONT | Y | 1.0 | 1 | NaN |
8 | 100009000.0 | 215.0 | TREMONT | Y | 2.5 | 2 | 1800.0 |
現(xiàn)在假設(shè)因?yàn)橐恍┬枨螅枰覀兘y(tǒng)一修改列名,把列名改為小寫,我們可以結(jié)合列表推導(dǎo)式輕易實(shí)現(xiàn)
df.rename(str.lower, axis="columns",inplace =True) df.columns
Index(["pid", "st_num", "st_name", "own_occupied", "num_bedrooms", "num_bath", "sq_ft"], dtype="object")
或者需要把列名中的_改為-:
new_cols = [c.replace("_","-") for c in df.columns] change_dict =dict(zip(df.columns,new_cols)) df.rename(columns=change_dict,inplace=True) df
pid | st-num | st-name | own-occupied | num-bedrooms | num-bath | sq-ft | |
---|---|---|---|---|---|---|---|
0 | 100001000.0 | 104.0 | PUTNAM | Y | 3.0 | 1 | 1000.0 |
1 | 100002000.0 | 197.0 | LEXINGTON | N | 3.0 | 1.5 | NaN |
2 | 100003000.0 | 125.0 | LEXINGTON | N | 2.5 | 1 | 850.0 |
3 | 100004000.0 | 201.0 | BERKELEY | NaN | 1.0 | NaN | 700.0 |
4 | NaN | 203.0 | BERKELEY | Y | 3.0 | 2 | 1600.0 |
5 | 100006000.0 | 207.0 | BERKELEY | Y | 2.5 | 1 | 800.0 |
6 | 100007000.0 | 125.0 | WASHINGTON | NaN | 2.0 | HURLEY | 950.0 |
7 | 100008000.0 | 213.0 | TREMONT | Y | 1.0 | 1 | NaN |
8 | 100009000.0 | 215.0 | TREMONT | Y | 2.5 | 2 | 1800.0 |
這里我沒(méi)有寫的精簡(jiǎn)一些,反而是復(fù)雜了,主要是想讓大家回憶起之前我分享的dict使用技巧中的內(nèi)容,注意這里inplace=True,導(dǎo)致的結(jié)果是我們的的確確修改了df所有的列名
2.1 根據(jù)需求新增列假如目前我們需要新增一列,根據(jù)房屋面積大小來(lái)賦值,我們先隨意把缺失值補(bǔ)上:
df["sq-ft"].fillna("0.0")
0 1000 1 0.0 2 850 3 700 4 1600 5 800 6 950 7 0.0 8 1800 Name: sq-ft, dtype: object
然后新建一列rank來(lái)根據(jù)房屋面積大小賦值S=small,M=medium,B=big:
df["rank"]= pd.cut(df["sq-ft"], [0, 800, 1600, np.inf], labels=("S","M","B")) df
pid | st-num | st-name | own-occupied | num-bedrooms | num-bath | sq-ft | rank | |
---|---|---|---|---|---|---|---|---|
0 | 100001000.0 | 104.0 | PUTNAM | Y | 3.0 | 1 | 1000.0 | M |
1 | 100002000.0 | 197.0 | LEXINGTON | N | 3.0 | 1.5 | NaN | NaN |
2 | 100003000.0 | 125.0 | LEXINGTON | N | 2.5 | 1 | 850.0 | M |
3 | 100004000.0 | 201.0 | BERKELEY | NaN | 1.0 | NaN | 700.0 | S |
4 | NaN | 203.0 | BERKELEY | Y | 3.0 | 2 | 1600.0 | M |
5 | 100006000.0 | 207.0 | BERKELEY | Y | 2.5 | 1 | 800.0 | S |
6 | 100007000.0 | 125.0 | WASHINGTON | NaN | 2.0 | HURLEY | 950.0 | M |
7 | 100008000.0 | 213.0 | TREMONT | Y | 1.0 | 1 | NaN | NaN |
8 | 100009000.0 | 215.0 | TREMONT | Y | 2.5 | 2 | 1800.0 | B |
具體實(shí)現(xiàn)方法我們之后會(huì)說(shuō),這里主要是用到了pandas的cut方法,非常便捷
3. 設(shè)置Index在許多情況下,使用數(shù)據(jù)的唯一值標(biāo)識(shí)字段作為其索引是有幫助的。這里可能我們的數(shù)據(jù)不太合適,因此我們先偽造一列Fake_Index來(lái)模擬真實(shí)場(chǎng)景中的真正索引
df["Fake_Index"]=["A00"+str(i) for i in range(len(df))] df
pid | st-num | st-name | own-occupied | num-bedrooms | num-bath | sq-ft | rank | Fake_Index | |
---|---|---|---|---|---|---|---|---|---|
0 | 100001000.0 | 104.0 | PUTNAM | Y | 3.0 | 1 | 1000.0 | M | A000 |
1 | 100002000.0 | 197.0 | LEXINGTON | N | 3.0 | 1.5 | NaN | NaN | A001 |
2 | 100003000.0 | 125.0 | LEXINGTON | N | 2.5 | 1 | 850.0 | M | A002 |
3 | 100004000.0 | 201.0 | BERKELEY | NaN | 1.0 | NaN | 700.0 | S | A003 |
4 | NaN | 203.0 | BERKELEY | Y | 3.0 | 2 | 1600.0 | M | A004 |
5 | 100006000.0 | 207.0 | BERKELEY | Y | 2.5 | 1 | 800.0 | S | A005 |
6 | 100007000.0 | 125.0 | WASHINGTON | NaN | 2.0 | HURLEY | 950.0 | M | A006 |
7 | 100008000.0 | 213.0 | TREMONT | Y | 1.0 | 1 | NaN | NaN | A007 |
8 | 100009000.0 | 215.0 | TREMONT | Y | 2.5 | 2 | 1800.0 | B | A008 |
現(xiàn)在我們添加的最后一列非常像真正的房屋Id了,讓我們來(lái)看看這個(gè)偽造的索引是不是唯一值,可以利用is_unique來(lái)檢驗(yàn):
df.Fake_Index.is_unique
True
沒(méi)有問(wèn)題,現(xiàn)在我們可以放心地把這列設(shè)置為我們真正的索引:
df = df.set_index("Fake_Index") df
pid | st-num | st-name | own-occupied | num-bedrooms | num-bath | sq-ft | rank | |
---|---|---|---|---|---|---|---|---|
Fake_Index | ||||||||
A000 | 100001000.0 | 104.0 | PUTNAM | Y | 3.0 | 1 | 1000.0 | M |
A001 | 100002000.0 | 197.0 | LEXINGTON | N | 3.0 | 1.5 | NaN | NaN |
A002 | 100003000.0 | 125.0 | LEXINGTON | N | 2.5 | 1 | 850.0 | M |
A003 | 100004000.0 | 201.0 | BERKELEY | NaN | 1.0 | NaN | 700.0 | S |
A004 | NaN | 203.0 | BERKELEY | Y | 3.0 | 2 | 1600.0 | M |
A005 | 100006000.0 | 207.0 | BERKELEY | Y | 2.5 | 1 | 800.0 | S |
A006 | 100007000.0 | 125.0 | WASHINGTON | NaN | 2.0 | HURLEY | 950.0 | M |
A007 | 100008000.0 | 213.0 | TREMONT | Y | 1.0 | 1 | NaN | NaN |
A008 | 100009000.0 | 215.0 | TREMONT | Y | 2.5 | 2 | 1800.0 | B |
現(xiàn)在對(duì)數(shù)據(jù)的操作容易多了,我們很多事情可以通過(guò)索引完成:
# 根據(jù)索引名稱切片 df["A000":"A003"]
pid | st-num | st-name | own-occupied | num-bedrooms | num-bath | sq-ft | rank | |
---|---|---|---|---|---|---|---|---|
Fake_Index | ||||||||
A000 | 100001000.0 | 104.0 | PUTNAM | Y | 3.0 | 1 | 1000.0 | M |
A001 | 100002000.0 | 197.0 | LEXINGTON | N | 3.0 | 1.5 | NaN | NaN |
A002 | 100003000.0 | 125.0 | LEXINGTON | N | 2.5 | 1 | 850.0 | M |
A003 | 100004000.0 | 201.0 | BERKELEY | NaN | 1.0 | NaN | 700.0 | S |
# 根據(jù)索引位置切片 df.iloc[1:3, 0:3]
pid | st-num | st-name | |
---|---|---|---|
Fake_Index | |||
A001 | 100002000.0 | 197.0 | LEXINGTON |
A002 | 100003000.0 | 125.0 | LEXINGTON |
# 定位到具體元素 df.iloc[1,2]
"LEXINGTON"總結(jié)
我把這一期的ipynb文件和py文件放到了GIthub上,大家如果想要下載可以點(diǎn)擊下面的鏈接:
Github倉(cāng)庫(kù)地址: https://github.com/yaozeliang/pandas_share
這一期先講到這里,希望大家能夠繼續(xù)支持我,完結(jié),撒花
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/43325.html
摘要:下面讓我們開(kāi)始提速假設(shè)我們現(xiàn)在的電價(jià)是定值,不根據(jù)用電時(shí)間段來(lái)改變,那么中最快的方法那就是采用,這就是一個(gè)簡(jiǎn)單的矢量化操作示范。它基本是在中運(yùn)行最快的方式。 Pandas 加速 大家好,今天我們來(lái)看有關(guān)pandas加速的小技巧,不知道大家在剛剛接觸pandas的時(shí)候有沒(méi)有聽(tīng)過(guò)如下的說(shuō)法 pandas太慢了,運(yùn)行要等半天 其實(shí)我想說(shuō)的是,慢不是pandas的錯(cuò),大家要知道pandas本身...
為什么你需要pandas 大家好,今天想和大家分享一下有關(guān)pandas的學(xué)習(xí)新的,我因工作需要,從去年12月開(kāi)始接觸這個(gè)非常好用的包,到現(xiàn)在為止也是算是熟悉了一些,因此發(fā)現(xiàn)了它的強(qiáng)大之處,特意想要和朋友們分享,特別是如果你每天和excel打交道,總是需要編寫一些vba函數(shù)或者對(duì)行列進(jìn)行g(shù)roupby啊,merge,join啊之類的,相信我,pandas會(huì)讓你解脫的。 好啦,閑話少說(shuō),這篇文章的基礎(chǔ)...
摘要:有關(guān)字符串基本方法大家好,我又回來(lái)了之前的幾期我們已經(jīng)簡(jiǎn)單了解了的基礎(chǔ)操作,但是只要涉及到數(shù)據(jù),最常見(jiàn)的就是字符串類型,所以很多時(shí)候我們其實(shí)都在和字符串打交道,所以今天,我會(huì)把我自己總結(jié)的,有關(guān)字符串的常用方法分享給大家,希望能夠幫到各位小 有關(guān)字符串基本方法 大家好,我又回來(lái)了! 之前的幾期我們已經(jīng)簡(jiǎn)單了解了pandas的基礎(chǔ)操作,但是只要涉及到數(shù)據(jù),最常見(jiàn)的就是String(字符串...
摘要:不為人知的七大實(shí)用技巧大家好,我今天勤快地回來(lái)了,這一期主要是和大家分享一些的實(shí)用技巧,會(huì)在日常生活中大大提升效率,希望可以幫助到大家還是老樣子,先給大家奉上這一期的章節(jié)目錄自定義選項(xiàng),設(shè)置實(shí)用中模塊構(gòu)建測(cè)試數(shù)據(jù)巧用訪問(wèn)器合并其他列拼接使用 Pandas不為人知的七大實(shí)用技巧 大家好,我今天勤快地回來(lái)了,這一期主要是和大家分享一些pandas的實(shí)用技巧,會(huì)在日常生活中大大提升效率,希望...
摘要:如何根據(jù)需要?jiǎng)?chuàng)建簡(jiǎn)單模型大家好,今天這一期我想和大家分享有關(guān)于創(chuàng)建模型的部分,首先讓我們來(lái)看一個(gè)比較常見(jiàn)的場(chǎng)景你每天需要打開(kāi)個(gè)進(jìn)行相同的操作,各種眼花繚亂的函數(shù)后老眼昏花。。。。 Pandas 如何根據(jù)需要?jiǎng)?chuàng)建簡(jiǎn)單模型 大家好,今天這一期我想和大家分享有關(guān)于pandas創(chuàng)建模型的部分,首先讓我們來(lái)看一個(gè)比較常見(jiàn)的場(chǎng)景: 你每天需要打開(kāi)N個(gè)excel進(jìn)行相同的操作,各種眼花繚亂的VBA函...
閱讀 1045·2021-11-15 18:11
閱讀 3170·2021-09-22 15:33
閱讀 3465·2021-09-01 11:42
閱讀 2660·2021-08-24 10:03
閱讀 3625·2021-07-29 13:50
閱讀 2930·2019-08-30 14:08
閱讀 1279·2019-08-28 17:56
閱讀 2263·2019-08-26 13:57