python將一行多字符轉換為多行單字符方法


筆者這次是第一次寫東西,主要是想把在運用中的一些實例給記錄下來,分享給那些和筆者有同樣需求的人。可能分享的方法有些累贅或者不准確,還望各位大佬勿噴,因為筆者也是python小白,這些都是通過搜索匯總得出來的。

需求:

原數據格式:


 我們要變成下面的樣子:(這里是做了分組和求和)

解決需求:

 #數據是直接從數據庫中查出來的,所以直接導入excel的數據,也可以直接連數據進行查詢。

import pandas as pd
info_new2=pd.read_excel("E:/路徑/文件名.xlsx", sheet_name='sheet名')

#將網站和運營商設置為索引
info_1 = info_new2.set_index(['target','optname'])
print(info_1)

#篩選出IP字段
ip = info_1['idcip']
#將idcip列以‘,’分開,分成多列
ipdf = ip.str.split(',',expand = True)
#將列轉換為行
ip = ipdf.stack()
#將最后一級索引刪除
ip = ip.reset_index(drop=True,level=-1)
#再調用一次reset_index,會自動進行笛卡爾乘積
ipdf = ip.reset_index()
#將自動生成的0列進行重命名
ipdf = ipdf.rename(columns={0:'idcip'})
print(ipdf)

#后面將idcsize,idcdelay,idcipnum進行同樣的操作。只是這三個字段在后面會求和計算,需要將類型轉換為數字型。

#將時延列有文本轉為數字型
info_delay= pd.to_numeric(delaydf['idcdelay'],errors='coerce')

#合並,按照網站和運營商和IP合並
info_two=pd.concat([ipdf,info_delay,info_ipnum,info_size],axis=1)

#去除idcdelay列為空的行
info_two = info_two[info_two['idcdelay'].notna()]

#按照
'target','idcip','optname'分組,'idcdelay','idcipnum','idcsize'分別求和
info_he=info_two.groupby(['target','idcip','optname'])['idcdelay','idcipnum','idcsize'].sum()

#寫入excel
info_he.to_excel("E:\\地址\\文件名.xlsx", sheet_name=sheet名)

大功告成!(第一次發表,希望大家多多包涵!)
 
 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM