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():
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
2、如果某個(gè)索引值在DataFrame的列或Series的索引中找不到躬审,則參與運(yùn)算的兩個(gè)對(duì)象就會(huì)被重新索引形成并集:
series2 = pd.Series(range(3), index=['b','e','f'])
frame+series2
三棘街、通用函數(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ǔ)充:
·插值填充·CSV的特點(diǎn):
- CSV(Comma-Separated Values)一般是以逗號(hào)為分隔符,其文件以純文本形式存儲(chǔ)表格數(shù)據(jù)(數(shù)字和文本)物舒,有時(shí)也稱為字符分隔值色洞,因?yàn)榉指糇址部梢圆皇嵌禾?hào)。
- 通常用于在在電子表格軟件和純文本之間交互數(shù)據(jù)冠胯;
- 純文本火诸,使用某個(gè)字符集,比如ASCII荠察、Unicode置蜀、EBCDIC或GB2312;
- 由記錄組成(典型的是每行一條記錄)悉盆;
- 每條記錄被分隔符分隔為字段(典型分隔符有逗號(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博客