天天看點

python将一行作為字段_python将一行多字元轉換為多行單字元方法

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

需求:

原資料格式:

python将一行作為字段_python将一行多字元轉換為多行單字元方法

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

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)

python将一行作為字段_python将一行多字元轉換為多行單字元方法

#篩選出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)

python将一行作為字段_python将一行多字元轉換為多行單字元方法

#後面将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)

python将一行作為字段_python将一行多字元轉換為多行單字元方法

#去除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()

#寫入excelinfo_he.to_excel("E:\\位址\\檔案名.xlsx", sheet_name=sheet名)

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