如何按指定宽度拼接Pandas DataFrame中的整数列?
解决Pandas DataFrame按指定宽度拼接列的问题
没问题,我来帮你搞定这个列拼接的需求!你想要把C1按两位数字宽度、C2按三位数字宽度拼接成新列,之前用str(df.C1)没成功是因为这个操作是把整个Series转成了字符串,而不是逐个元素处理。下面给你两种高效的解决方案:
方法一:向量化字符串处理(推荐,大数据量更高效)
利用Pandas的字符串方法,先把整数列转为字符串,再用str.zfill(n)来填充前导0保证指定宽度,最后直接拼接两个字符串列:
import pandas as pd # 示例数据 df = pd.DataFrame({'C1': [8, 12, 5], 'C2': [49, 156, 7]}) # 创建新列CODESUM df['CODESUM'] = df['C1'].astype(str).str.zfill(2) + df['C2'].astype(str).str.zfill(3)
运行后你的DataFrame会变成:
C1 C2 CODESUM 0 8 49 08049 1 12 156 12156 2 5 7 05007
你提到开头的0无关紧要,这个结果完全满足要求——既保证了指定的宽度,多余的前导0也不影响后续使用。
方法二:使用apply和格式化字符串
如果习惯用Python的格式化语法,也可以用apply逐行处理,适合逻辑更复杂的场景:
df['CODESUM'] = df.apply(lambda row: f"{row['C1']:02d}{row['C2']:03d}", axis=1)
这里的02d表示把整数格式化为两位(不足补0),03d表示三位,和方法一的效果完全一致。不过要注意,apply是逐行操作,当数据量非常大时,效率会比方法一的向量化处理低一些。
内容的提问来源于stack exchange,提问作者user9371297
相关产品推荐
相关产品推荐

