python数据分析7:数据格式化

【设置小数位数】

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

# ***这些数据不是数值型,而是数字和逗号组成的字符串,再变成数值很麻烦,慎重使用***

你可能感兴趣的:(python数据分析7:数据格式化)