1、通過(guò)apply進(jìn)行數(shù)據(jù)預(yù)處理
其最重要的參數(shù)是傳入的函數(shù)柳譬,傳入的函數(shù)會(huì)對(duì)DataFrame的每一行(index)或每一列(column)進(jìn)行操作蛛勉,然后返回每一個(gè)index或column對(duì)應(yīng)的值缚去,再將這些行(或者列)以及其對(duì)應(yīng)的返回值重新組合成一個(gè)DataFrame的對(duì)象残腌,然后作為整個(gè)apply方法的返回值返回。
至于傳入的函數(shù)具體是對(duì)每一行還是每一列進(jìn)行操作缠黍,取決于apply傳入的axis參數(shù)净响,默認(rèn)axis=0,表示對(duì)每一列進(jìn)行操作白翻,axis=1乍炉,表示對(duì)每一行進(jìn)行操作。因此apply方法最重要兩個(gè)參數(shù)是傳入的函數(shù)func和axis滤馍。
applymap: 用于dataframe上岛琼,是元素級(jí)別的操作;
map:(其實(shí)是python自帶的)用于series上巢株,是元素級(jí)別的操作槐瑞。
通過(guò)apply可以進(jìn)行的數(shù)據(jù)預(yù)處理包括:
(1)添加行列數(shù)據(jù)
添加列數(shù)據(jù),可以直接指定列數(shù)據(jù)和列名
(2)修改某一行的數(shù)據(jù)大小寫
(3)去掉數(shù)據(jù)兩邊的空格
(4)把原來(lái)的一個(gè)數(shù)據(jù)變成多個(gè)
(5)給列重新命名
(6)刪除某一列
(7)把數(shù)據(jù)保存成csv
import pandas as pd
import numpy as np
from pandas import DataFrame,Series
df = pd.read_csv('apply_demo.csv')
#添加一列
s1 = Series(['a']*28)
df['A'] = s1
#修改列元素
df['A'] = df['A'].apply(str.upper)
#把一列分成多列
def foo(line):
items = line.strip().split(' ')
return Series([items[1],items[3],items[5]])
dt_temp = df['data'].apply(foo)
dt_temp=dt_temp.rename(columns={0:'Symbol',1:'Seqno',2:'Price'})
df_new = df.combine_first(dt_temp)
#刪除一列
del df_new['data']
#保存
df_new.to_csv('demo_duolicate.csv')
2阁苞、去重操作
(1)查看元素是否唯一值unique()
(2)查看每個(gè)元素出現(xiàn)的次數(shù)
計(jì)數(shù)值value_counts()
(3)判斷與前后數(shù)據(jù)是否重復(fù)
(4)刪除重復(fù)數(shù)據(jù)困檩,保留最前面的一個(gè),保留最后一個(gè)
import pandas as pd
import numpy as np
from pandas import DataFrame,Series
df= pd.read_csv('demo_duplicate.csv')
df.head()
del df['Unnamed: 0']
df['Seqno'].unique()
df['Seqno'].duplicated() #判斷是否和前面重復(fù)
df['Seqno'].drop_duplicates(keep='first')
df['Seqno'].duplicated(keep='last') #判斷是否和hou面重復(fù)
df['Seqno'].drop_duplicates(keep='last')
3那槽、時(shí)間序列操作
(1)格式化時(shí)間
(2)把時(shí)間當(dāng)成索引
(3)具體內(nèi)容參考文檔
import pandas as pd
import numpy as np
from pandas import DataFrame,Series
from datetime import datetime
t1 = datetime(2009,10,20)
date_list=[
datetime(2016,9,1),
datetime(2016,9,10),
datetime(2017,9,1),
datetime(2017,9,20),
datetime(2017,10,1)
]
s1 = Series(np.random.rand(5),index=date_list)
s1['2016-09-10']
s1['20160910']
s1['2016-9']
s1['2016']
# pd內(nèi)部提供函數(shù)
pd.date_range(start='2016-01-01',periods=100)
pd.date_range(start='2016-01-01',periods=100,freq='W')
pd.date_range(start='2016-01-01',periods=100,freq='W-MON')
pd.date_range(start='2016-01-01',periods=100,freq='H')