熊猫数据框 zfill 多列

时间:2021-01-13 17:32:42

标签: python pandas dataframe

如何将 zfill 应用于 Pandas 中的多列?

import pandas as pd
df = pd.DataFrame([[1,2, 3],[4,5,6], [6,7,8], [11,22,33]], columns=['A', 'B', 'C'])
df[['A','B']].convert_dtypes(convert_string=True)
df[['A','B']] = df[['A','B']].str.apply(lambda x: x.zfill(2))

失败并显示“AttributeError: 'DataFrame' object has no attribute 'str'” 尽管我遵循了 https://stackoverflow.com/a/42375779/5618856

说明:我怎样才能从
这个 ... ... ... 那个

A  B  C         A  B  C
 1  2  5       01 02  5
 7 59  2       07 59  2

即将多列转换为字符串并添加前导零(填充 2 位数字)

2 个答案:

答案 0 :(得分:2)

答案取决于熊猫使用的数据类型。您可以查看此打印 df.dtypes


如果所有数据类型都是整数,那么这将起作用:

import pandas as pd
df = pd.DataFrame([[1.0, 2, 3],[4,5,6], [6,7,8], [11,22,33]], columns=['A', 'B', 'C'])
df[['A','B']] = df[['A','B']].apply(lambda x: x.astype(str).str.zfill(2))

如果至少有一个值是 float 类型,则必须先将该值转换为整数,然后再转换为字符串,然后再调用 zfill()

df = pd.DataFrame([[1.0, 2, 3],[4,5,6], [6,7,8], [11,22,33]], columns=['A', 'B', 'C'])
df.dtypes
df[['A','B']] = df[['A','B']].apply(lambda x: x.astype(int).astype(str).str.zfill(2))

在这两种情况下,输出都是

    A   B   C
0  01  02   3
1  04  05   6
2  06  07   8
3  11  22  33

这个答案只是 Mondaa 第一个答案的延伸。

答案 1 :(得分:1)

首先,您需要在更改列类型后将新列分配给您的数据框。 您可以通过以下方式将列类型更改为字符串:

df[['A','B']] = df[['A','B']].astype(str)

然后,使用 lambda 函数应用 zfill 方法:

df[['A','B']] = df[['A','B']].apply(lambda x: x.str.zfill(2))

输入案例中的输出如下:

    A   B   C
0   01  02  3
1   04  05  6
2   06  07  8
3   11  22  33

注意:最后一行不受影响,因为它已经是两位数了。