halcon 将数据保存到excel_pandas筛选、合并、批量保存excel数据
人生苦短,我學(xué)python!
python是目前最流行的編程語(yǔ)言,功能十分強(qiáng)大,在爬蟲(chóng)、數(shù)據(jù)分析、人工智能方面均得以廣泛應(yīng)用。本專(zhuān)輯主要分享兩個(gè)數(shù)據(jù)分析庫(kù)numpy和pandas在數(shù)據(jù)分析方面的基礎(chǔ)知識(shí)和各種技能,pandas的快、準(zhǔn)、簡(jiǎn)潔遠(yuǎn)非office的excel可比,而且免費(fèi)。本期開(kāi)始將全面總結(jié)pandas在處理excel數(shù)據(jù)的方方面面的知識(shí),力爭(zhēng)通過(guò)100期左右,完成pandas和numpy相關(guān)知識(shí)的介紹及其配套數(shù)據(jù)可視化庫(kù)matplotlib和seaborn的介紹。特別說(shuō)明,做這個(gè)專(zhuān)輯,純屬愛(ài)好,總結(jié)所學(xué)知識(shí)。pandas的強(qiáng)大,誰(shuí)用誰(shuí)知道,絕非打廣告。我把她叫做超級(jí)excel。由于是筆記,當(dāng)然就是先從非常厲害的東東開(kāi)始了,所以沒(méi)有依據(jù)由淺入深的順序。知識(shí)的記錄仍然按照知識(shí)點(diǎn)的方式進(jìn)行,所有代碼均經(jīng)過(guò)反復(fù)實(shí)踐,力爭(zhēng)知識(shí)點(diǎn)沒(méi)有錯(cuò)誤。操作平臺(tái)有Jupyter Notebook 、pycharm。安裝非常簡(jiǎn)單。后期估計(jì)會(huì)記錄一些他們的設(shè)置。本期共6547個(gè)字,需要花費(fèi)17分鐘閱讀。本期是第一期,如果沒(méi)人喜歡,下期開(kāi)始就設(shè)置權(quán)限了,本來(lái)就是自己的學(xué)習(xí)小結(jié),錯(cuò)誤在所難免,對(duì)您有用就看看,沒(méi)用就繞道,謝謝!建議電腦查看,手機(jī)查看格式可能會(huì)亂。
知識(shí)點(diǎn)一:批量打開(kāi)多工作薄并快速進(jìn)行合并具體步驟:
環(huán)境準(zhǔn)備:
import pandas as pd
import os
第一步,新建文件夾(里需要合并的多個(gè)工作表)定義新建文件夾的路徑;
imputdir = r'C:\Users\xiaobin\Desktop\111'
第一步,新建一個(gè)空的DateFrame;
dfe=pd.DataFrame(columns=['姓名','2011年','2012年','2013年','2014年'])
第三步:利用os庫(kù)中的walk方法可以遍歷文件夾的所有文件,并讀取文件的名字,os.path.join能夠?qū)⑽募A的路徑和文件夾中的名字合并成每個(gè)文件完整路徑。并將每個(gè)文件讀取,再與空的DateFrame合并.
for parents,dirnames,filenames in os.walk(imputdir):
? ? for filename in filenames:
? ? ? ? df=pd.read_excel(os.path.join(parents,filename))
? ? ? ? dfe=dfe.append(df,ignore_index=True)
第四歩:保存數(shù)據(jù)
df_empty.to_excel(r'C:\Users\xiaobin\Desktop\111\匯總表.xlsx',index_label='序號(hào)')
完整代碼如下:
import pandas as pd
import os
imputdir = r'C:\Users\xiaobin\Desktop\111'
dfe=pd.DataFrame(columns=['姓名','2011年','2012年','2013年','2014年'])
for parents,dirnames,filenames in os.walk(imputdir):
? ? for filename in filenames:
? ? ? ? df=pd.read_excel(os.path.join(parents,filename))
? ? ? ? dfe=dfe.append(df,ignore_index=True)
df_empty.to_excel(r'C:\Users\xiaobin\Desktop\111\匯總表.xlsx',index_label='序號(hào)')
知識(shí)點(diǎn)二:保存多個(gè)工作表到同一工作薄環(huán)境安裝:
import numpy as np
import pandas as pd
path='要保存的路徑'
with pd.ExcelWriter(path) as writer:
? ? df.to_excel(writer,sheet_name='第一個(gè)文件的名字',columns=['需要保存的列名,用逗號(hào)隔開(kāi)'],index=True,index_label='行索引的名字')
? ? df.to_excel(writer,sheet_name='第二個(gè)文件的名字',columns=['需要保存的列名,用逗號(hào)隔開(kāi)'],index=True,index_label='行索引的名字')
? ? df.to_excel(writer,sheet_name='第一個(gè)文件的名字',columns=['需要保存的列名,用逗號(hào)隔開(kāi)'],index=True,index_label='行索引的名字')??
非常簡(jiǎn)單,就不贅述了。
知識(shí)點(diǎn)三:神器篩選直接上我操練的代碼吧。篩選方法第一種:通過(guò)索引篩選 filter函數(shù)In?[1]:
import numpy as npimport pandas as pdIn?[139]:
path=r'C:\Users\xiaobin\Desktop\練習(xí).xlsx'df=pd.read_excel(path,index_col=0)dfOut[139]:
| 82 | 103 | 61 | 58 | 96 | 康定 |
| 144 | 148 | 85 | 62 | 60 | 烏魯木齊 |
| 121 | 73 | 142 | 56 | 145 | 常州 |
| 139 | 119 | 120 | 86 | 94 | 石家莊 |
| 93 | 107 | 55 | 83 | 138 | 唐山 |
| 145 | 111 | 65 | 126 | 66 | 連云港 |
| 130 | 123 | 116 | 132 | 110 | 蘇州 |
| AA | A | B | AB | BB | NaN |
對(duì)序列進(jìn)行篩選,針對(duì)Series的序列
In?[140]:
df.西瓜.filter(items=['李四','李山'])Out[140]:
李四 144李山 139
Name: 西瓜, dtype: object
In?[141]:
df.西瓜.filter(like=('李'))Out[141]:
李四 144李山 139
小李子 93
Name: 西瓜, dtype: object
In?[142]:
df.西瓜.filter(regex=('^李.$'))Out[142]:
李四 144李山 139
Name: 西瓜, dtype: object
針對(duì)DateFrame的index(行索引)columns(列索引)
In?[143]:
df.filter(items=['李四','李山'],axis=0) #行索引篩選axis=0,如果axis=1針對(duì)列篩選Out[143]:
| 144 | 148 | 85 | 62 | 60 | 烏魯木齊 |
| 139 | 119 | 120 | 86 | 94 | 石家莊 |
In?[144]:
df.filter(items=['李四','李山'],axis=1) #如果設(shè)置axis=1,啥都沒(méi)有Out[144]:
In?[145]:
df.filter(items=['西瓜','苦瓜'],axis=1) #對(duì)列索引進(jìn)行篩選Out[145]:
| 82 | 61 |
| 144 | 85 |
| 121 | 142 |
| 139 | 120 |
| 93 | 55 |
| 145 | 65 |
| 130 | 116 |
| AA | B |
In?[146]:
df.filter(items=['西瓜','苦瓜'],axis='columns')?
#對(duì)列篩選columns
Out[146]:
| 82 | 61 |
| 144 | 85 |
| 121 | 142 |
| 139 | 120 |
| 93 | 55 |
| 145 | 65 |
| 130 | 116 |
| AA | B |
In?[147]:
df.filter(items=['李四','李山'],axis='index') #行索引篩選axis='index',如果axis=1針對(duì)列篩選Out[147]:
| 144 | 148 | 85 | 62 | 60 | 烏魯木齊 |
| 139 | 119 | 120 | 86 | 94 | 石家莊 |
In?[148]:
df.filter(like='李',axis='index')Out[148]:
| 144 | 148 | 85 | 62 | 60 | 烏魯木齊 |
| 139 | 119 | 120 | 86 | 94 | 石家莊 |
| 93 | 107 | 55 | 83 | 138 | 唐山 |
In?[149]:
df.filter(like='瓜',axis='columns')
Out[149]:
| 82 | 61 | 58 |
| 144 | 85 | 62 |
| 121 | 142 | 56 |
| 139 | 120 | 86 |
| 93 | 55 | 83 |
| 145 | 65 | 126 |
| 130 | 116 | 132 |
| AA | B | AB |
In?[150]:
df.filter(regex='瓜',axis='columns')
Out[150]:
| 82 | 61 | 58 |
| 144 | 85 | 62 |
| 121 | 142 | 56 |
| 139 | 120 | 86 |
| 93 | 55 | 83 |
| 145 | 65 | 126 |
| 130 | 116 | 132 |
| AA | B | AB |
In?[151]:
df.filter(regex='^..$',axis='columns')Out[151]:
| 82 | 61 | 58 | 康定 |
| 144 | 85 | 62 | 烏魯木齊 |
| 121 | 142 | 56 | 常州 |
| 139 | 120 | 86 | 石家莊 |
| 93 | 55 | 83 | 唐山 |
| 145 | 65 | 126 | 連云港 |
| 130 | 116 | 132 | 蘇州 |
| AA | B | AB | NaN |
In?[152]:
df.filter(regex='^..$',axis='index')Out[152]:
| 82 | 103 | 61 | 58 | 96 | 康定 |
| 144 | 148 | 85 | 62 | 60 | 烏魯木齊 |
| 139 | 119 | 120 | 86 | 94 | 石家莊 |
| 130 | 123 | 116 | 132 | 110 | 蘇州 |
| AA | A | B | AB | BB | NaN |
In?[153]:
前面是針對(duì)Series和DateFrame的索引進(jìn)行篩選,下面針對(duì)DateFrame的數(shù)據(jù)行和列進(jìn)行篩選原理是針對(duì)序列Series的str.match方法 File "", line 1 前面是針對(duì)Series和DateFrame的索引進(jìn)行篩選,下面針對(duì)DateFrame的數(shù)據(jù)行和列進(jìn)行篩選In?[154]:
對(duì) DataFrame 行或列進(jìn)行篩選print('-----對(duì) DataFrame 的正則篩選-------')print(df[df.地區(qū).astype(str).str.match('^..$')])#對(duì) df 的行篩選print(df.T[df.T.級(jí)別.astype(str).str.match('[AB]{2}')].T)#對(duì) df 的列篩選In?[155]:#篩選滿(mǎn)足條件的某些列df.地區(qū).str.match('^..$',na=False) #含義是篩選出地區(qū)中只有兩個(gè)字的地區(qū)的對(duì)應(yīng)行內(nèi)容。Out[155]:
張三 True李四 False
王二麻子 True
李山 False
小李子 True
曾賢志 False
黃山 True
級(jí)別 False
Name: 地區(qū), dtype: bool
In?[156]:
df[df.地區(qū).str.match('^..$')] #此處出現(xiàn)錯(cuò)誤主要是篩選字段地區(qū)中有錯(cuò)誤值或者空值如何處理看下面,參數(shù)na=False就是屏蔽掉錯(cuò)誤值。--------------------------------------------------------------------------ValueError Traceback (most recent call last) in ----> 1 df[df.地區(qū).str.match('^..$')] #此處出現(xiàn)錯(cuò)誤主要是篩選字段地區(qū)中有錯(cuò)誤值或者空值如何處理看下面,參數(shù)na=False就是屏蔽調(diào)錯(cuò)誤值d:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key) 2789 # Do we have a (boolean) 1d indexer?-> 2790 if com.is_bool_indexer(key): 2791 return self._getitem_bool_array(key) 2792 d:\ProgramData\Anaconda3\lib\site-packages\pandas\core\common.py in is_bool_indexer(key) 134 na_msg = "Cannot mask with non-boolean array containing NA / NaN values" 135 if isna(key).any():--> 136 raise ValueError(na_msg) 137 return False 138 return TrueValueError: Cannot mask with non-boolean array containing NA / NaN valuesIn?[157]:
df[df.地區(qū).str.match('^..$',na=False)] #看吧,正確了,不過(guò)還有其他方法處理錯(cuò)誤值或者缺失值Out[157]:
| 82 | 103 | 61 | 58 | 96 | 康定 |
| 121 | 73 | 142 | 56 | 145 | 常州 |
| 93 | 107 | 55 | 83 | 138 | 唐山 |
| 130 | 123 | 116 | 132 | 110 | 蘇州 |
In?[158]:
df.地區(qū).astype(str).str.match('^..$')#兩者對(duì)比看一下,空值轉(zhuǎn)為字符串就變成false,放入索引中就不會(huì)被選擇。Out[158]:
張三 True李四 False
王二麻子 True
李山 False
小李子 True
曾賢志 False
黃山 True
級(jí)別 False
Name: 地區(qū), dtype: bool
In?[159]:
df.地區(qū).str.match('^..$')Out[159]:
張三 True李四 False
王二麻子 True
李山 False
小李子 True
曾賢志 False
黃山 True
級(jí)別 NaN
Name: 地區(qū), dtype: object
上面是對(duì)列字段的處理,針對(duì)行字段的處理首先要把表格轉(zhuǎn)置.T,
看一下數(shù)據(jù),此次利用級(jí)別行來(lái)篩選
In?[160]:
dfOut[160]:
| 82 | 103 | 61 | 58 | 96 | 康定 |
| 144 | 148 | 85 | 62 | 60 | 烏魯木齊 |
| 121 | 73 | 142 | 56 | 145 | 常州 |
| 139 | 119 | 120 | 86 | 94 | 石家莊 |
| 93 | 107 | 55 | 83 | 138 | 唐山 |
| 145 | 111 | 65 | 126 | 66 | 連云港 |
| 130 | 123 | 116 | 132 | 110 | 蘇州 |
| AA | A | B | AB | BB | NaN |
In?[161]:
df.T #第一步,表格轉(zhuǎn)置Out[161]:
| 82 | 144 | 121 | 139 | 93 | 145 | 130 | AA |
| 103 | 148 | 73 | 119 | 107 | 111 | 123 | A |
| 61 | 85 | 142 | 120 | 55 | 65 | 116 | B |
| 58 | 62 | 56 | 86 | 83 | 126 | 132 | AB |
| 96 | 60 | 145 | 94 | 138 | 66 | 110 | BB |
| 康定 | 烏魯木齊 | 常州 | 石家莊 | 唐山 | 連云港 | 蘇州 | NaN |
In?[162]:
df.values #df數(shù)據(jù)內(nèi)容時(shí)ndarray,二維數(shù)組Out[162]:
array([[82, 103, 61, 58, 96, '康定'],[144, 148, 85, 62, 60, '烏魯木齊'],
[121, 73, 142, 56, 145, '常州'],
[139, 119, 120, 86, 94, '石家莊'],
[93, 107, 55, 83, 138, '唐山'],
[145, 111, 65, 126, 66, '連云港'],
[130, 123, 116, 132, 110, '蘇州'],
['AA', 'A', 'B', 'AB', 'BB', nan]], dtype=object)
In?[163]:
df.T[df.T.級(jí)別.str.match('[AB]{2}',na=False)] #任務(wù)完成不過(guò)與原表不一致,咋整呢?Out[163]:
| 82 | 144 | 121 | 139 | 93 | 145 | 130 | AA |
| 58 | 62 | 56 | 86 | 83 | 126 | 132 | AB |
| 96 | 60 | 145 | 94 | 138 | 66 | 110 | BB |
In?[164]:
df.T[df.T.級(jí)別.str.match('[AB]{2}',na=False)].T #再次進(jìn)行轉(zhuǎn)置Out[164]:
| 82 | 58 | 96 |
| 144 | 62 | 60 |
| 121 | 56 | 145 |
| 139 | 86 | 94 |
| 93 | 83 | 138 |
| 145 | 126 | 66 |
| 130 | 132 | 110 |
| AA | AB | BB |
總結(jié)
以上是生活随笔為你收集整理的halcon 将数据保存到excel_pandas筛选、合并、批量保存excel数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: html异形轮播,异形滚动
- 下一篇: mac怎么合并两个容器_Mac怎么合并文