暑期实践第二十一天 2022-7-24

今日进度:数据格式化,数据分组统计

1.数据格式化

1.1设置小数位数

设置小数位数,主要使用DataFrame对象中的round函数,该函数可以实现四舍五入,而它的decimals参数则用于设置保留小数的位数,设置后的数据类型不会发生变化,依然是浮点型

DataFrame.round(decimals=0, *arg, **kwargs)

decimals:每一列四舍五入的小数位数,整型,字典或Series对象。如果是整数,则将每一列四舍五入到相同的位置;否则,将dic和Series舍入到可变数目的位置。如果小数是类似于字典的,那么列名应该在键中;如果小数是级数,列名应该在索引中。没有包含在小数中的任何列都将保持原样,非输入列的小数元素将被忽略。

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.random([5, 5]),
     columns=['A1', 'A2', 'A3', 'A4', 'A5'])
print(df)
print(df.round(2))     #保留小数点后两位
print(df.round({'A1':1, 'A2':2}))     #A1保留小数点的后一位、A2保留小数点后两位
s1 = pd.Series([1, 0, 2], index=['A1', 'A2', 'A3'])
print(df.round(s1))   #设置Series对象的小数位数

输出结果

         A1        A2        A3        A4        A5
0  0.982675  0.915655  0.383080  0.743219  0.930802
1  0.110738  0.824724  0.413849  0.619962  0.579390
2  0.589983  0.360215  0.442702  0.873653  0.762054
3  0.523321  0.629663  0.175422  0.993261  0.369487
4  0.895804  0.037372  0.511144  0.831248  0.925663
     A1    A2    A3    A4    A5
0  0.98  0.92  0.38  0.74  0.93
1  0.11  0.82  0.41  0.62  0.58
2  0.59  0.36  0.44  0.87  0.76
3  0.52  0.63  0.18  0.99  0.37
4  0.90  0.04  0.51  0.83  0.93
    A1    A2        A3        A4        A5
0  1.0  0.92  0.383080  0.743219  0.930802
1  0.1  0.82  0.413849  0.619962  0.579390
2  0.6  0.36  0.442702  0.873653  0.762054
3  0.5  0.63  0.175422  0.993261  0.369487
4  0.9  0.04  0.511144  0.831248  0.925663
    A1   A2    A3        A4        A5
0  1.0  1.0  0.38  0.743219  0.930802
1  0.1  1.0  0.41  0.619962  0.579390
2  0.6  0.0  0.44  0.873653  0.762054
3  0.5  1.0  0.18  0.993261  0.369487
4  0.9  0.0  0.51  0.831248  0.925663

当然,保留小数位数也可以用自定义函数,例如,将DataFrame对象中的各个浮点值保留两位小数,关键代码如下:

df.applymap(lambda x: '%.2f'%x)

注意,经过自定义函数处理后的数据将不再是浮点型而是对象型,如果后续计算则首先应该将数据类型进行转换。

1.2设置百分比

主要使用apply函数和format函数

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.random([5, 5]),
     columns=['A1', 'A2', 'A3', 'A4', 'A5'])
df['百分比']=df['A1'].apply(lambda x: format(x, '.0%'))    #整列保留0位小数
df['百分比']=df['A1'].apply(lambda x: format(x, '.2%'))    #整列保留两位小数
df['百分比']=df['A1'].map(lambda x:'{:.0%}'.format(x))  #使用map函数整列保留0位小数

1.3设置千位分隔符

import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
data = [['高等数学', '1月', 12342521], ['高等数学', '2月', 23123141], ['高等数学', '3月', '45643212']]
columns = ['图书', '月份', '金额']
df = pd.DataFrame(data=data, columns=columns)
df['金额'] = df['金额'].apply(lambda x:format(int(x),','))
print(df)

结果

       图书 月份        金额
0  高等数学  1月  12,342,521
1  高等数学  2月  23,123,141
2  高等数学  3月  45,643,212

注意:设置千位分割符后,对于程序来说,这些数据将不再是数值型,而是数字和逗号组成的字符串,如果由于程序需要再变成数值型会很麻烦,因此设置千位分隔符要慎重

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值