pandas數(shù)據(jù)分析庫3~4

8.3算術(shù)運(yùn)算和對(duì)齊

目的:通過學(xué)習(xí)算術(shù)運(yùn)算和對(duì)齊來掌握nan缺失值處理旭愧、DataFrame與Series的運(yùn)算與多個(gè)數(shù)據(jù)框之間的運(yùn)算原則以及如何在pandas中使用通用函數(shù)。
一肺缕、nan缺失值處理
1)isnull()函數(shù)notnull()函數(shù):判斷每個(gè)值是否是nan值邑时,返回布爾數(shù)組奴紧。

s = np.array([1,5,np.nan,np.nan,10])
s.isnull()        #判斷是否是nan值,是nan值時(shí)返回Ture
s.notnull()       #判斷是否是非nan值晶丘,是非nan值時(shí)返回Ture

舉例isnull():


isnull.png

2)dropna()函數(shù):返回刪除nan值后的新數(shù)據(jù)框黍氮。
·dropna()使用時(shí)要注意的一些地方:

df.dropna()                               #含有nan值的行被刪除
df.dropna(axis-1)                         #按axis=1縱向判斷,含nan值的列被刪除
df.dropna(how='all')                      #all表示某行的所有數(shù)據(jù)都為nan才刪除
df.dropna(thresh=2)                       #某行的nan值>=2才刪除

3)fillna()函數(shù):將nan值用特定的值填充浅浮。
·fillna()函數(shù)使用的要點(diǎn):

df.fillna(0)                              #缺失值都用0填充
df.fillna(method='ffill')                 #缺失值用其前面的非nan值填充
df.fillna(method='bfill')                 #缺失值用其后面的非nan值填充
df.fillna(value=df.mean)                  #用計(jì)算得到的平均值填充

二沫浆、對(duì)齊處理
簡(jiǎn)單闡述:
由于pandas支持標(biāo)簽訪問數(shù)據(jù),運(yùn)算時(shí)會(huì)自動(dòng)基于標(biāo)簽對(duì)齊進(jìn)行運(yùn)算滚秩。運(yùn)算數(shù)據(jù)若是Series則只有行標(biāo)簽专执,若是DataFrame則會(huì)在行、列兩個(gè)方向上將數(shù)據(jù)的標(biāo)簽對(duì)齊郁油,對(duì)應(yīng)的數(shù)據(jù)元素進(jìn)行計(jì)算本股,標(biāo)簽不匹配的數(shù)據(jù)元素默認(rèn)標(biāo)記為NaN值攀痊。
·注意:
1、在默認(rèn)情況下拄显,DataFrame和Series之間進(jìn)行算術(shù)運(yùn)算會(huì)將Series的索引匹配到DataFrame的列苟径,然后行一直向下廣播:

frame = pd.DataFrame(np.arange(12).reshape((4,3)),columns=list('bde'),index=['Utah','Ohio','Texas','Oregon'])
series = frame.ix[0]
frame - series
對(duì)齊處理1.png

2、如果某個(gè)索引值在DataFrame的列或Series的索引中找不到躬审,則參與運(yùn)算的兩個(gè)對(duì)象就會(huì)被重新索引形成并集:

series2 = pd.Series(range(3), index=['b','e','f'])
frame+series2

對(duì)齊處理2.png

三棘街、通用函數(shù)
由于pandas時(shí)基于numpy構(gòu)建的,所有numpy支持的通用函數(shù)都可以在pandas中用承边;而且在pandas對(duì)數(shù)據(jù)框的處理中遭殉,可以應(yīng)用DataFrame的apply()來實(shí)現(xiàn)將自定義函數(shù)應(yīng)用到各行各列上。
·簡(jiǎn)要說明:

f = lambda  x: x.max() - x.min()          #定義函數(shù)f博助,參數(shù)x將代表整行险污、整列
df.apply(f)                               #在每列上求最大值與最小值的差
df.apply(f,axis=1)                        #在每行上求最大值與最小值的差
df.apply(lambda  x:x-x.mean)              #計(jì)算每列數(shù)據(jù)與均值的差

此外,applymap()可以參考apply()的使用應(yīng)用到每個(gè)數(shù)據(jù)上翔始。

8.4讀/寫數(shù)據(jù)文件

目的:通過pandas作為數(shù)據(jù)接口讀取CSV罗心、HDF5、Excel等格式的文件城瞎;這里就只簡(jiǎn)單介紹讀取CSv渤闷、HDF5文件。
一脖镀、讀/寫CSV文件
·CSV文件是以逗號(hào)分隔的文件文本飒箭,但是也有以空格分隔的文件文本;pandas提供read_csv()和to_csv()兩個(gè)方法來讀/寫CSV文件蜒灰。

讀取CSV文件時(shí)要注意:
1弦蹂、文件mobile.csv中含有中文,保存時(shí)Windows系統(tǒng)默認(rèn)采用cp936强窖,所以讀取時(shí)也應(yīng)該指定該編碼字符集(encoding='cp936')凸椿,不然會(huì)出現(xiàn)亂碼;讀取時(shí)mobile.csv文件的第0行被自動(dòng)解析成列名翅溺。
2脑漫、當(dāng)文件中不含列名時(shí),可以在讀取時(shí)用names參數(shù)自行指定列名咙崎,例如:當(dāng)文件不含列名時(shí)可以用header=None來表示文件不含列名优幸,這樣文件第0行就不會(huì)被錯(cuò)誤解析韋列名。
3褪猛、讀取空格分隔的數(shù)據(jù)网杆,注意sep="\s+"
4、其他:

pd.read_csv("數(shù)據(jù)文件名",shiprows=[0,2])                  #跳過第0,2行
pd.read_csv("數(shù)據(jù)文件名",shiprows=4)                      #跳過前四行
pd.read_csv("數(shù)據(jù)文件名",shipfooter=2,engine='pthon')     #跳過尾部?jī)尚?pd.read_csv("數(shù)據(jù)文件名",nrows=10)                        # 只讀取前10行

當(dāng)文件中包含了日期碳却,在讀取時(shí)可以指定參數(shù) parse_dates[' '],以便把該列解析為pandas的日期格式队秩,并用index_col參數(shù)指定為索引。以一個(gè)stock.txt為例:

df = pd.read_csv('stock.txt',parse_dates=[' 交易日'],encoding='cp936',step='\s+',index_col=[' 交易日'])

存儲(chǔ):

df.to_csv("d1.csv",encoding='cp936')      #存盤追城,默認(rèn)用逗號(hào)分隔
df.to_csv("d2.csv",encoding='cp936',sep=' ')  #存盤時(shí)指定用空格分隔

二刹碾、讀/寫HDF5文件
HDF是一種存儲(chǔ)和組織大量數(shù)據(jù)的文件格式燥撞,HDF文件存取的方式類似于字典操作座柱,都通過鍵存取數(shù)據(jù):

store = pd.HDFStore('store.h5')
store['a']=df1
store['c']=df2
df3=store[' a']
df4=store[' c']

補(bǔ)充:

·插值填充
插值填充.png

·CSV的特點(diǎn):

  • CSV(Comma-Separated Values)一般是以逗號(hào)為分隔符,其文件以純文本形式存儲(chǔ)表格數(shù)據(jù)(數(shù)字和文本)物舒,有時(shí)也稱為字符分隔值色洞,因?yàn)榉指糇址部梢圆皇嵌禾?hào)。
  • 通常用于在在電子表格軟件純文本之間交互數(shù)據(jù)冠胯;
  • 純文本火诸,使用某個(gè)字符集,比如ASCII荠察、Unicode置蜀、EBCDICGB2312
  • 由記錄組成(典型的是每行一條記錄)悉盆;
  • 每條記錄被分隔符分隔為字段(典型分隔符有逗號(hào)盯荤、分號(hào)或制表符;有時(shí)分隔符可以包括可選的空格)焕盟;
  • 每條記錄都有同樣的字段序列秋秤。
  • 其他:
    • 每條記錄占一行 以逗號(hào)為分隔符 逗號(hào)前后的空格會(huì)被忽略
    • 字段中包含有逗號(hào)該字段必須用雙引號(hào)括起來
    • 字段中包含有換行符脚翘,該字段必須用雙引號(hào)括起來
    • 字段前后包含有空格灼卢,該字段必須用雙引號(hào)括起來
    • 字段中的雙引號(hào)用兩個(gè)雙引號(hào)表示
    • 字段中如果有雙引號(hào),該字段必須用雙引號(hào)括起來
    • 第一條記錄来农,可以是字段名
  • csv.reader()函數(shù)與csv.writer()相反鞋真,用于返回一個(gè)可迭代對(duì)象,可以讀取該對(duì)象沃于,并且解析為CSV數(shù)據(jù)的每一行涩咖;
  • csv.DictReader類和csv.DictWriter類,用于將CSV數(shù)據(jù)都進(jìn)到字典中(首先檢查是否使用給定字段名,如果沒有,就使用第一行作為鍵)揽涮,接著將字典字段寫入CSV文件中抠藕;

參考網(wǎng)站:

1、Python Tutor - Visualize Python, Java, C, C++, JavaScript, TypeScript, and Ruby code execution
2蒋困、(1條消息) Python基礎(chǔ)語法09--讀寫csv文件_nikeylee的博客-CSDN博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盾似,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌零院,老刑警劉巖溉跃,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異告抄,居然都是意外死亡撰茎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門打洼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來龄糊,“玉大人,你說我怎么就攤上這事募疮§懦停” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵阿浓,是天一觀的道長(zhǎng)他嚷。 經(jīng)常有香客問我,道長(zhǎng)芭毙,這世上最難降的妖魔是什么筋蓖? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮退敦,結(jié)果婚禮上粘咖,老公的妹妹穿的比我還像新娘。我一直安慰自己苛聘,他們只是感情好涂炎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著设哗,像睡著了一般唱捣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上网梢,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天震缭,我揣著相機(jī)與錄音,去河邊找鬼战虏。 笑死拣宰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的烦感。 我是一名探鬼主播巡社,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼手趣!你這毒婦竟也來了晌该?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朝群,沒想到半個(gè)月后燕耿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姜胖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年誉帅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片右莱。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚜锨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出隧出,到底是詐尸還是另有隱情踏志,我是刑警寧澤阀捅,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布胀瞪,位于F島的核電站,受9級(jí)特大地震影響饲鄙,放射性物質(zhì)發(fā)生泄漏凄诞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一忍级、第九天 我趴在偏房一處隱蔽的房頂上張望帆谍。 院中可真熱鬧,春花似錦轴咱、人聲如沸汛蝙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽窖剑。三九已至,卻和暖如春戈稿,著一層夾襖步出監(jiān)牢的瞬間西土,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工鞍盗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留需了,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓般甲,卻偏偏與公主長(zhǎng)得像肋乍,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子敷存,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容