用pandas清洗数据具体步骤(基础篇二)
分类 : 博文聚焦 | 发布时间 : 2018-01-31 15:07:35 | 浏览 : 174
我们接着上一篇来做。我们可以先读取excel数据。然后进行以下操作:
选取数据和更改行索引和列索引
tt=pd.read_excel('d://new.xlsx') tt.columns=["m"+str(x).replace('/','') for x in tt.columns ] tt.index=tt.ix[:,0].values # 将第一列作为索引。不需要进行重新索引。但是不能出现空值。 tt=tt.iloc[:,1:] # 疏忽了,这里需要去掉第一列.因为我已经把这一列作为索引了python还有很多函数来更改行索引和列索引。但是有很多需要注意的地方
例如rename更改索引名字要注意是行索引还是列索引?
reindex重新设定索引,则需要注意重新设定的索引是否能包含原有的索引?
列数据的互相计算比较方便。索引为了方便对数据进行处理。我需要进行行列转置。这里需要注意的有3个问题:
1.这里我要计算资产负债率的时候需要表现2位小数,而且后面的百分比显示也只能显示2位小数。所以这里需要使用format函数;
2.format以后显示的都是字符,如果要进行进一步的计算,需要把字符重新转换成数字;
3.我只需要查看年底也就是12月31日的数据。所以用loc抽取12月的数据进行处理。
行列转置;书籍类型转换;选取特定列索引
tt=tt.T # 行列转换 tt=tt.applymap(lambda x:'{:.2f}'.format(x/10000)) # 将数字都变成以万为单位。但是format以后数字都会变成字符 print (tt.dtypes) # 可以查看各列的数据类型 tt=tt.apply(pd.to_numeric,errors='ignore') # 把其中数字样子的字符都变成数字。 tt['资产负债率']=tt['负债合计']/tt['资产总计'] sel_index=[x for x in tt.index if x[5:7]=='12'] # 抽取中其中12月份的数据 tt=tt.loc[sel_index] # 查看12月份的数据
这里先做的是简单的资产组成分析。
货币资产:
流动资产:这里表示不包含货币现金的流动资产
长期资产:固定资产和无形资产
投资性资产:交易性金融资产和房地产投资和其他长期股权投资
长期资产+投资性资产=非流动资产
简单数据计算
tt['货币资金占比']=tt['货币资金']/tt['资产总计'] tt['货币资金占比']=tt['货币资金占比'].apply(lambda x:'{:.2%}'.format(x)) tt['流动资产']=tt['流动资产合计']-tt['货币资金'] tt['流动资产占比']=tt['流动资产']/tt['资产总计'] tt['流动资产占比']=tt['流动资产占比'].apply(lambda x:'{:.2%}'.format(x)) tt['投资性资产']=tt['可供出售金融资产']+tt['长期股权投资']+tt['投资性房地产'] tt['投资性资产占比']=tt['投资性资产']/tt['资产总计'] tt['投资性资产占比']=tt['投资性资产占比'].apply(lambda x:'{:.2%}'.format(x)) tt['长期资产']=tt['非流动资产合计']-tt['投资性资产'] tt['长期资产占比']=tt['长期资产']/tt['资产总计'] tt['长期资产占比']=tt['长期资产占比'].apply(lambda x:'{:.2%}'.format(x)) tt_zc=tt[['货币资金','流动资产','投资性资产','长期资产','资产总计','货币资金占比','流动资产占比','投资性资产占比','长期资产占比']] print (tt_zc)最后把数据保存到特定的xlsx文件中去。
pandas里面只能把表格完全放到一个全新的xlsx的文件中去。而不能把表格放入到已经有sheet的文件中去。它会覆盖掉原来所有的数据。
我用的自己编写的一个模块modeify_excel_py3(1.可以在xlsx中新建sheet,并把数据存入新的sheet;2.可以直接用语句把已经存在的sheet打开并进行修改)。把数据存入某个已经的存在的xlsx文件中某个表。
from excel import modify_excel_py3 as me a=me.modify_excel_cells(r'd:\\final\\000030.xlsx','zichan') a.insert_new_sheet(tt_zc)最后处理的结果如下:
相关阅读:
How to import the class within the same directory or sub directory?
How to return dictionary keys as a list in Python?
Python `if x is not None` or `if not x is None`?
Assign output of os.system to a variable and prevent it from being displayed on the screen
How can I reverse a list in Python?
What are the differences between type() and isinstance()?
How to install packages using pip according to the requirements.txt file from a local directory?