<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          手把手教你使用Pandas從Excel文件中提取滿足條件的數(shù)據(jù)并生成新的文件(附源碼)

          共 4220字,需瀏覽 9分鐘

           ·

          2022-04-27 22:38

          點(diǎn)擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進(jìn)行關(guān)注

          回復(fù)“書籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書

          我本將心向明月,奈何明月照溝渠。

          大家好,我是Python進(jìn)階者。

          一、前言

          前幾天在Python星耀交流群有個(gè)叫【蔣衛(wèi)濤】的粉絲問(wèn)了一個(gè)Python自動(dòng)化辦公的題目,這里拿出來(lái)給大家分享。

          下面是他的原始數(shù)據(jù)。

          二、實(shí)現(xiàn)過(guò)程

          這里【月神】、【瑜亮老師】分別給出了5種可行的方法,分享給大家。

          方法一:分別取日期與小時(shí),按照日期和小時(shí)刪除重復(fù)項(xiàng)

          import?pandas?as?pd

          excel_filename?=?'數(shù)據(jù).xlsx'
          df?=?pd.read_excel(excel_filename)
          #?print(df)

          #?方法一:分別取日期與小時(shí),按照日期和小時(shí)刪除重復(fù)項(xiàng)
          df['day']?=?df['SampleTime'].dt.day???#?提取日期列
          df['hour']?=?df['SampleTime'].dt.hour?????#?提取小時(shí)列
          df?=?df.drop_duplicates(subset=['day',?'hour'])??#?刪除重復(fù)項(xiàng)

          #?把篩選結(jié)果保存為excel文件
          df.to_excel('數(shù)據(jù)篩選結(jié)果2.xlsx')

          方法二:把日期中的分秒替換為0

          import?pandas?as?pd

          excel_filename?=?'數(shù)據(jù).xlsx'
          df?=?pd.read_excel(excel_filename)

          #?方法二:把日期中的分秒替換為0
          SampleTime_new?=?df['SampleTime'].map(lambda?x:?x.replace(minute=0,?second=0))
          data?=?df[SampleTime_new.duplicated()?==?False]
          print(df)
          #?把篩選結(jié)果保存為excel文件
          df.to_excel('數(shù)據(jù)篩選結(jié)果2.xlsx')

          方法三:對(duì)日期時(shí)間按照小時(shí)進(jìn)行分辨

          import?pandas?as?pd

          excel_filename?=?'數(shù)據(jù).xlsx'
          df?=?pd.read_excel(excel_filename)

          #?方法三:對(duì)日期時(shí)間按照小時(shí)進(jìn)行分辨
          SampleTime_new?=?df['SampleTime'].dt.floor(freq='H')
          df?=?df[SampleTime_new.duplicated()?==?False]
          print(df)
          #?把篩選結(jié)果保存為excel文件
          df.to_excel('數(shù)據(jù)篩選結(jié)果2.xlsx')

          方法四:對(duì)日期時(shí)間按照小時(shí)進(jìn)行分辨

          import?pandas?as?pd

          excel_filename?=?'數(shù)據(jù).xlsx'
          df?=?pd.read_excel(excel_filename)

          #?方法四:對(duì)日期時(shí)間按照小時(shí)進(jìn)行分辨
          SampleTime_new?=?df['SampleTime'].dt.to_period(freq='H')
          df?=?df[SampleTime_new.duplicated()?==?False]
          print(df)
          #?把篩選結(jié)果保存為excel文件
          df.to_excel('數(shù)據(jù)篩選結(jié)果2.xlsx')

          方法五:對(duì)日期時(shí)間進(jìn)行重新格式,并按照新的日期時(shí)間刪除

          import?pandas?as?pd

          excel_filename?=?'數(shù)據(jù).xlsx'
          df?=?pd.read_excel(excel_filename)

          #?方法五:對(duì)日期時(shí)間進(jìn)行重新格式,并按照新的日期時(shí)間刪除重復(fù)項(xiàng)(會(huì)引入新列)
          df['new']?=?df['SampleTime'].dt.strftime('%Y-%m-%d?%H')
          df?=?df.drop_duplicates(subset=['new'])
          print(df)
          #?把篩選結(jié)果保存為excel文件
          df.to_excel('數(shù)據(jù)篩選結(jié)果2.xlsx')

          小總結(jié)

          前面這5個(gè)方法有相似的地方,比如方法1和方法5都是把日期只取到小時(shí),方法3和方法4都是按照小時(shí)進(jìn)行分辨,而方法1,2和5其實(shí)本質(zhì)上都是把分鐘和秒變成0,比如方法5中這樣寫的話,就和方法2是一樣的df['new'] = df['SampleTime'].dt.strftime('%Y-%m-%d %H:00:00')

          方法2和3是【月神】提供的方法,方法1,4,5是【瑜亮老師】提供的方法。

          【月神】使用了floor向下取整,也就是抹去零頭。本來(lái)【瑜亮老師】還想用ceil向上取整試試,結(jié)果發(fā)現(xiàn)不對(duì),整點(diǎn)的會(huì)因?yàn)橄蛏先≌鴮?dǎo)致數(shù)據(jù)缺失,比如8:15,向上取整就是9點(diǎn),如果同一天中剛好9:00也有一條數(shù)據(jù),那么這個(gè)9點(diǎn)的數(shù)據(jù)就會(huì)作為重復(fù)的數(shù)據(jù)而刪除。本來(lái)應(yīng)該是8點(diǎn)9點(diǎn)各取1條數(shù)據(jù)的,結(jié)果變成了只取8點(diǎn)這1條。包括round,也會(huì)因?yàn)樗纳嵛迦耄ㄟ@里就不糾結(jié)了)導(dǎo)致信息缺失更多。

          方法六:使用openpyxl處理

          這里我本來(lái)還想用openpyxl進(jìn)行實(shí)現(xiàn),但是卻卡殼了,只能提取出24條數(shù)據(jù)出來(lái),先放這里做個(gè)記錄吧,哪天突然間靈光了,再補(bǔ)充好了。

          from?openpyxl?import?load_workbook,?Workbook
          from?datetime?import?datetime

          #?打開數(shù)據(jù)工作簿
          workbook?=?load_workbook('數(shù)據(jù).xlsx')
          #?打開工作表
          sheet?=?workbook.active
          time_column?=?sheet['C']
          row_lst?=?[]
          date_lst?=?[]
          hour_lst?=?[]
          for?cell?in?time_column:
          ????if?cell.value?!=?"SampleTime"?and?cell.value?!=?None:
          ????????#?print(cell.value.date())
          ????????if?cell.value.date()?not?in?date_lst:
          ????????????date_lst.append(cell.value.date())
          ????????#?row_lst.append(cell.row)
          print(date_lst)

          #?if?all(cell.value?!=?"SampleTime",?cell.value?!=?None,?cell.value.date()?==?date,?cell.value.hour?not?in?hour_lst):

          for?date?in?date_lst:
          ????#?print(date)
          ????for?cell?in?time_column:
          ????????#?if?all((cell.value?!=?"SampleTime",?cell.value?!=?None,?cell.value.date()?==?date,?cell.value.hour?not?in?hour_lst)):
          ????????#?????row_lst.append(cell.row)
          ????????if?cell.value?!=?"SampleTime"?and?cell.value?!=?None:
          ????????????if?cell.value.date()?==?date:
          ????????????????if?cell.value.hour?not?in?hour_lst:
          ????????????????????hour_lst.append(cell.value.hour)
          ????????????????????row_lst.append(cell.row)
          ????hour_lst?=?[]
          print(hour_lst)
          #?將滿足要求的數(shù)據(jù)寫入到新表
          new_workbook?=?Workbook()
          new_sheet?=?new_workbook.active

          #?創(chuàng)建和原數(shù)據(jù)?一樣的表頭(第一行)
          header?=?sheet[1]
          header_lst?=?[]
          for?cell?in?header:
          ????header_lst.append(cell.value)
          new_sheet.append(header_lst)

          #?從舊表中根據(jù)行號(hào)提取符合條件的行,并遍歷單元格獲取值,以列表形式寫入新表
          for?row?in?row_lst:
          ????data_lst?=?[]
          ????for?cell?in?sheet[row]:
          ????????data_lst.append(cell.value)
          ????new_sheet.append(data_lst)

          #?最后切記保存
          new_workbook.save('新表.xlsx')
          print("滿足條件的新表保存完成!")

          這個(gè)方法就是遍歷date,然后遍歷一次之后,將hour置空,如此反復(fù),這樣就可以每次取到每天唯一的某一個(gè)小時(shí)的一個(gè)時(shí)間。

          三、總結(jié)

          大家好,我是Python進(jìn)階者。這篇文章主要分享了使用Pandas從Excel文件中提取滿足條件的數(shù)據(jù)并生成新的文件的干貨內(nèi)容,文中提供了5個(gè)方法,行之有效。如果你還有其他寫法,也歡迎大家積極嘗試,一起學(xué)習(xí),成功的話記得分享給我噢!

          最后感謝粉絲【蔣衛(wèi)濤】提問(wèn),感謝【月神】、【瑜亮老師】給出的代碼和具體解析,感謝粉絲【dcpeng】、【馮誠(chéng)】、【艾?!びX羅】、【多隆】、【憶?? 逍遙】、【問(wèn)題不大】等人參與學(xué)習(xí)交流。

          小伙伴們,快快用實(shí)踐一下吧!如果在學(xué)習(xí)過(guò)程中,有遇到任何Python問(wèn)題,歡迎加我好友,我拉你進(jìn)Python學(xué)習(xí)交流群共同探討學(xué)習(xí)。

          -------------------?End?-------------------

          往期精彩文章推薦:

          歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【

          萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行

          瀏覽 50
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲成人无码免费观看 | www..91av | 婷婷在线成人视频精品 | 免费有码精品一区四区 | 日本swag在线观看 |