python 将dataframe中的str都转化成float_【Python自学笔记】一次不太成功的利用Python整理的利润表实践...
前情提要:蓬佩奧不怕開水燙:XLOOKUP函數簡單使用指南
之前這篇文章里面,是使用的word對報表進行處理,相對簡單快捷;但是,數據量比較大比較復雜的情況下,用word處理起來會有點吃力。
因此,我鉆研了一個下午,寫了個python腳本,中間還遇到不少問題,不過還是寫出來了,以后再處理類似的報表的時候,就不用再打開word了。
信息來源:東方財富Choice數據-2019年電子信息行業財務報表-利潤表原始Excel有很多問題:股票代碼不是標準的六位數字;萬億不分,沒有單位;有多余的數據行。
這里使用Python 3 的Pandas庫進行整理,主要使用pandas庫基本操作。
#讀取準備好的財務報表 import pandas as pd import re input_file = r"電子信息行業利潤表.xlsx" df = pd.read_excel(input_file)df=df.drop(['序號','相關','公告日期'],axis=1) #刪除不需要的列然后用format補全六位代碼,在這里居然也卡了很久,最后發現錯誤原因竟然是沒有重新賦值!!
在學習python的過程中,遇到的最大的困難是什么?
#六位股票代碼補全 def six_digits(stock_num):stock_num=str("{0:06d}".format(stock_num))return(stock_num)df['股票代碼']=df['股票代碼'].apply(lambda x:six_digits(x))把列名稱規范一下。其實這一步我也不是太清楚怎么給每一列批量重命名,有知道的可以告訴我。
#列標題重命名 df=df.rename(columns={'凈利潤':'凈利潤(億元)','凈利潤同比':'凈利潤同比(%)','營業總收入':'營業總收入(億元)','營業總收入同比':'營業總收入同比(%)','營業支出':'營業支出(億元)','銷售費用':'銷售費用(億元)','管理費用':'管理費用(億元)','財務費用':'財務費用(億元)','營業總支出':'營業總支出(億元)','營業利潤':'營業利潤(億元)', '利潤總額':'利潤總額(億元)'})然后規范一下單位。這里需要用到正則表達式了。
兩個正則表達式,分別匹配所有“萬”“億”為單位的金額;
#引入正則表達式,去除萬億等單位 wan_pattern = re.compile('(?P<amount>(-|)d{1,4}[萬])') yi_pattern = re.compile('(?P<amount>(-|)d*.*d*[億])')轉換為億元
def amt_process(amt):str1=str(amt)if wan_pattern.search(str1):new_amt=float(str1.rstrip("萬"))/10000 #去掉“萬”結尾并除以10000return('{:.3f}'.format(new_amt)) #保留三位小數elif yi_pattern.search(str1):new_amt=float(str1.rstrip("億")) #直接去掉“億”結尾return('{:.2f}'.format(new_amt)) #保留兩位小數else:return(amt)df=df.applymap(amt_process) #對DataFrame所有元素應用數值處理函數輸出一下DataFrame,看上去好像沒什么不對:
但是輸出Excel以后,出現了問題
df.to_excel(r"電子信息行業利潤表(已整理).xlsx",sheet_name="利潤表",index=False)正則表達式處理之后,輸出的全部為文本型數值。
問題出在哪里呢?我們發現,出錯的列,數據類型都不是我們需要的float64
看到了這兩篇文章:
乘風:Pandas數據類型轉換的幾個小技巧
Pandas DataFrame將多列數據一次性從object轉換為datetime
決定試試
amount=[] for x in df.columns.tolist():if "(億元)" in x:amount.append(x)df[amount]=df[amount].apply(pd.to_numeric)最后輸出
輸出結果如圖歡迎各位批評指正。
總結
以上是生活随笔為你收集整理的python 将dataframe中的str都转化成float_【Python自学笔记】一次不太成功的利用Python整理的利润表实践...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端能读取压缩包内容吗?_解决前端多环境
- 下一篇: explain ref_你必须要掌握的M