您的位置:首页 > 其它

用pandas清洗数据具体步骤(基础篇二)

2018-01-31 15:07 239 查看
我们接着上一篇来做。我们可以先读取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['流动资产占比'
4000
]=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)
最后处理的结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: