熊猫-仅填充混合列中的数值

时间:2019-02-27 04:47:04

标签: python pandas

我的数据框中有两列包含混合字符串-有些是字母,有些是数字。我需要用前导零填充数字字符串,而不是字母字符串。

输入:

    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问题不同,因为我需要避免填充字母字符串。

2 个答案:

答案 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))