我的数据框中有两列包含混合字符串-有些是字母,有些是数字。我需要用前导零填充数字字符串,而不是字母字符串。
输入:
Item
0 571
1 63
2 12345
3 99561
4 lid
5 show
所需的输出:
Item
0 00571
1 00063
2 12345
3 99561
4 lid
5 show
这是到目前为止我得到的:
item_columns = ['Item','Item_num']
for column in item_columns:
df[column][df[column].notnull()] = df[column].astype(str).str.zfill(5)
输出为:
Item
0 00571
1 00063
2 12345
3 99561
4 00lid
5 0show
我不能在索引4和5上使用那些前导零。 注意:我还需要保留NaN,以便它们将以NULL的形式加载到数据库中,这就是为什么我在进行转换之前检查notnull()的原因。
与this问题不同,因为我需要避免填充字母字符串。
答案 0 :(得分:0)
使用可以从选择带有isdecimal
的数字的行开始:
print(df)
Item
0 571
1 63
2 12345
3 99561
4 lid
5 show
df['Item'][df['Item'].str.isdecimal()] = df['Item'][df['Item'].str.isdecimal()].str.zfill(5)
print(df)
Item
0 00571
1 00063
2 12345
3 99561
4 lid
5 show
答案 1 :(得分:0)
这是我找到的解决方案。您可能会认为它与我的原始解决方案有同样的问题(短字符串前导零),但事实并非如此:
df['item'] = df['item'].apply(lambda x: str(x).zfill(5))