如何将 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 位数字)
答案 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
注意:最后一行不受影响,因为它已经是两位数了。