我在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
有两列,ID
和pattern
。 pattern
中长度最长的字符串位于第一行len('AAABCDEE')
,长度为8。
我的目标是标准化字符串,使其长度相同,尾随空格为?
。
输出应该是这样的:
>>> df
ID pattern
0 first AAABCDEE
1 second ABBBBD??
2 third CCCDE???
3 fourth AA??????
4 fifth ABCDE???
如果我能够创建尾随空格NaN
,那么我可以尝试类似:
df = df.applymap(lambda x: int(x) if pd.notnull(x) else str("?"))
但是我不确定如何有效地(1)找到pattern
中最长的字符串和(2)然后添加NaN
将字符串的末尾添加到此长度?这可能是一种令人费解的方法......
答案 0 :(得分: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
答案 1 :(得分: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
在Pandas 0.22.0
here的来源中,可以看出ljust
完全等同于pad
side='right'
,所以请选择更多明确。
答案 2 :(得分:3)
n = df.pattern.str.len().max()
df.assign(pattern=[f'{i:?<{n}s}' for i in df.pattern])
ID pattern
0 first AAABCDEE
1 second ABBBBD??
2 third CCCDE???
3 fourth AA??????
4 fifth ABCDE???