【设置小数位数】
DataFrame.round(decimals=0, *args, **kwargs)
decimals 每一列四舍五入的小数位数,整型、字典或Series对象。如果是整数,则将每一列四舍五入到相同的位置;否则,将dict和Series舍入到可变数目的位置。如果小数是类似于字典的,那么列名应该在键中。如果小数是级数,列名在索引中。没有包含在小数中的任何列都将保持原样,非输入列的小数元素将被忽略。
*args 附加的关键字参数
**kwargs 附加的关键字参数
返回值 返回DataFrame对象
# 四舍五入保留指定的小数位数
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.random([5, 5]),columns=['A1', 'A2', 'A3', 'A4', 'A5'])
# print(df)
A1 A2 A3 A4 A5
0 0.299625 0.222070 0.013363 0.344320 0.099325
1 0.000787 0.308033 0.165536 0.418188 0.683410
2 0.720442 0.602093 0.323868 0.947492 0.970904
3 0.621043 0.185310 0.568168 0.850920 0.931071
4 0.659879 0.710683 0.030170 0.244488 0.642424
print(df.round(2))
A1 A2 A3 A4 A5
0 0.51 0.81 0.72 0.59 0.90
1 0.36 0.71 0.03 0.72 0.38
2 0.91 0.92 0.11 0.34 0.53
3 0.57 0.28 0.26 0.15 0.51
4 0.27 0.96 0.28 0.17 0.52
print(df.round({'A1':1, 'A2':2})) # A1列保留小数点的后一位,A2列保留小数点的后两位
A1 A2 A3 A4 A5
0 0.1 0.10 0.403920 0.558473 0.151692
1 0.4 0.00 0.867565 0.029727 0.806319
2 0.8 0.42 0.886093 0.247809 0.358689
3 0.4 0.27 0.222844 0.374405 0.719389
4 0.8 0.21 0.261631 0.386564 0.214388
s1 = pd.Series([1, 0, 2], index=['A1', 'A2', 'A3'])
print(df.round(s1)) # 设置Series对象的小数位数
A1 A2 A3 A4 A5
0 0.2 0.0 0.60 0.291033 0.969539
1 0.3 0.0 0.44 0.519556 0.455127
2 0.8 1.0 0.48 0.947509 0.201501
3 0.5 0.0 0.00 0.461904 0.576343
4 0.6 0.0 0.87 0.617363 0.896591
# 自定义函数
df.applymap(lambda x: '%.2f'%x) # 处理后的数据不再是浮点型而是对象型
print(df)
【设置百分比】
# 将指定数据格式化为百分比数据
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位小数
A1 A2 A3 A4 A5 百分比
0 0.953212 0.642768 0.819766 0.610742 0.922975 95%
1 0.881631 0.420358 0.394806 0.960303 0.120988 88%
2 0.110223 0.091917 0.163204 0.835646 0.422145 11%
3 0.200097 0.786347 0.663281 0.147799 0.265478 20%
4 0.602281 0.239182 0.747308 0.390589 0.378752 60%
df['百分比'] = df['A1'].apply(lambda x:format(x, '.2%')) # 整列保留2位小数
A1 A2 A3 A4 A5 百分比
0 0.457696 0.754100 0.522601 0.502301 0.668932 45.77%
1 0.378477 0.006895 0.114609 0.849366 0.937605 37.85%
2 0.632259 0.719535 0.954830 0.145513 0.165507 63.23%
3 0.244287 0.731360 0.943496 0.629500 0.434717 24.43%
4 0.877607 0.653111 0.981080 0.278565 0.408406 87.76%
df['百分比'] = df['A1'].map(lambda x:'{:.0%}'.format(x)) # 使用map函数整列保留0位小数
A1 A2 A3 A4 A5 百分比
0 0.553920 0.441553 0.942843 0.695469 0.483677 55%
1 0.205598 0.301583 0.547959 0.561747 0.271282 21%
2 0.700769 0.316883 0.581278 0.321206 0.765251 70%
3 0.849178 0.282629 0.151513 0.383950 0.509054 85%
4 0.857620 0.741968 0.708585 0.034897 0.490551 86%
【设置千位分隔符】
# 处理后的数据不再是浮点型而是对象型
# 将金额格式化为带千位分隔符的数据
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
data = [['零基础学Python', '1月', 49768889], ['零基础学Python', '2月', 1777775], ['零基础学Python', '3月',137999990]]
columns = ['图书', '月份', '$']
df = pd.DataFrame(data=data, columns=columns)
df['$'] = df['$'].apply(lambda x:format(int(x), ','))
print(df)
图书 月份 $
0 零基础学Python 1月 49,768,889
1 零基础学Python 2月 1,777,775
2 零基础学Python 3月 137,999,990
# ***这些数据不是数值型,而是数字和逗号组成的字符串,再变成数值很麻烦,慎重使用***