如何在pandas DataFrame中的行之间标准化字符串?

Sha*_*ang 3 python dataframe python-3.x pandas

我在Python3.x中有以下pandas DataFrame:

import pandas as pd

dict1 = {
    'ID':['first', 'second', 'third', 'fourth', 'fifth'], 
    'pattern':['AAABCDEE', 'ABBBBD', 'CCCDE', 'AA', 'ABCDE']
}

df = pd.DataFrame(dict1)

>>> df
       ID   pattern
0   first  AAABCDEE
1  second    ABBBBD
2   third     CCCDE
3  fourth        AA
4   fifth     ABCDE
Run Code Online (Sandbox Code Playgroud)

有两列,IDpattern.pattern长度最长的字符串位于第一行,len('AAABCDEE')长度为8.

我的目标是标准化字符串,使它们的长度相同,尾随空格为?.

这是输出应该是什么样子:

>>> df
       ID   pattern
0   first  AAABCDEE
1  second  ABBBBD?? 
2   third  CCCDE???
3  fourth  AA??????
4   fifth  ABCDE???
Run Code Online (Sandbox Code Playgroud)

如果我能够创建尾随空格NaN,那么我可以尝试以下方法:

df = df.applymap(lambda x: int(x) if pd.notnull(x) else str("?"))
Run Code Online (Sandbox Code Playgroud)

但我不确定如何有效地(1)找到最长的字符串pattern和(2)然后添加NaN字符串的结尾到这个长度?这可能是一种令人费解的方法......

WeN*_*Ben 8

你可以用 str.pad

df.pattern.str.pad(width=df.pattern.str.len().max(),side='right',fillchar='?')
Out[1154]: 
0    AAABCDEE
1    ABBBBD??
2    CCCDE???
3    AA??????
4    ABCDE???
Name: pattern, dtype: object
Run Code Online (Sandbox Code Playgroud)


mir*_*ulo 7

Series.str.ljust在获取列中的最大字符串长度后,您可以使用此方法.

df.pattern.str.ljust(df.pattern.str.len().max(), '?')

# 0    AAABCDEE
# 1    ABBBBD??
# 2    CCCDE???
# 3    AA??????
# 4    ABCDE???
# Name: pattern, dtype: object
Run Code Online (Sandbox Code Playgroud)

在源熊猫0.22.0 这里就可以看出,ljust是完全等同于padside='right',所以挑选无论你找到更加清晰.