如何在 Pandas 中的字符串末尾添加特定数量的字符?
How to add a specific number of characters to the end of string in Pandas?
我在 Python 中使用 Pandas 库,我正在尝试将包含文本的列的长度增加到相同的长度。我试图通过多次添加特定字符(通常为白色 space,在此示例中我将使用“_”)直到达到该列的最大长度来执行此操作。
例如:
Col1_Before
A
B
A1R
B2
AABB4
Col1_After
A____
B____
A1R__
B2___
AABB4
到此为止(以上面的table为例)。这是下一部分(以及我坚持的那一部分)。
df['Col1_Max'] = df.Col1.map(lambda x: len(x)).max()
df['Col1_Len'] = df.Col1.map(lambda x: len(x))
df['Difference_Len'] = df ['Col1_Max'] - df ['Col1_Len']
我可能没有很好地解释自己,因为我还在学习。如果这令人困惑,请告诉我,我会澄清。
这不是最 pandas 的解决方案,但您可以尝试以下方法:
col = np.array(["A", "B", "A1R", "B2", "AABB4"])
data = pd.DataFrame(col, columns=["Before"])
现在计算最大长度、单个长度列表和差异:
max_ = data.Before.map(lambda x: len(x)).max()
lengths_ = data.Before.map(lambda x: len(x))
diffs_ = max_ - lengths_
创建一个名为 After
的新列,添加下划线或任何其他字符:
data["After"] = data["Before"] + ["_"*i for i in diffs_]
所有这些给出:
Before After
0 A A____
1 B B____
2 A1R A1R__
3 AABB4 AABB4
不创建额外的列:
In [63]: data
Out[63]:
Col1
0 A
1 B
2 A1R
3 B2
4 AABB4
In [64]: max_length = data.Col1.map(len).max()
In [65]: data.Col1 = data.Col1.apply(lambda x: x + '_'*(max_length - len(x)))
In [66]: data
Out[66]:
Col1
0 A____
1 B____
2 A1R__
3 B2___
4 AABB4
考虑 pd.Series
s
s = pd.Series(['A', 'B', 'A1R', 'B2', 'AABB4'])
解决方案
使用 str.ljust
m = s.str.len().max()
s.str.ljust(m, '_')
0 A____
1 B____
2 A1R__
3 B2___
4 AABB4
dtype: object
适合你的情况
m = df.Col1.str.len().max()
df.Col1 = df.Col1.ljust(m '_')
我在 Python 中使用 Pandas 库,我正在尝试将包含文本的列的长度增加到相同的长度。我试图通过多次添加特定字符(通常为白色 space,在此示例中我将使用“_”)直到达到该列的最大长度来执行此操作。
例如:
Col1_Before
A
B
A1R
B2
AABB4
Col1_After
A____
B____
A1R__
B2___
AABB4
到此为止(以上面的table为例)。这是下一部分(以及我坚持的那一部分)。
df['Col1_Max'] = df.Col1.map(lambda x: len(x)).max()
df['Col1_Len'] = df.Col1.map(lambda x: len(x))
df['Difference_Len'] = df ['Col1_Max'] - df ['Col1_Len']
我可能没有很好地解释自己,因为我还在学习。如果这令人困惑,请告诉我,我会澄清。
这不是最 pandas 的解决方案,但您可以尝试以下方法:
col = np.array(["A", "B", "A1R", "B2", "AABB4"])
data = pd.DataFrame(col, columns=["Before"])
现在计算最大长度、单个长度列表和差异:
max_ = data.Before.map(lambda x: len(x)).max()
lengths_ = data.Before.map(lambda x: len(x))
diffs_ = max_ - lengths_
创建一个名为 After
的新列,添加下划线或任何其他字符:
data["After"] = data["Before"] + ["_"*i for i in diffs_]
所有这些给出:
Before After
0 A A____
1 B B____
2 A1R A1R__
3 AABB4 AABB4
不创建额外的列:
In [63]: data
Out[63]:
Col1
0 A
1 B
2 A1R
3 B2
4 AABB4
In [64]: max_length = data.Col1.map(len).max()
In [65]: data.Col1 = data.Col1.apply(lambda x: x + '_'*(max_length - len(x)))
In [66]: data
Out[66]:
Col1
0 A____
1 B____
2 A1R__
3 B2___
4 AABB4
考虑 pd.Series
s
s = pd.Series(['A', 'B', 'A1R', 'B2', 'AABB4'])
解决方案
使用 str.ljust
m = s.str.len().max()
s.str.ljust(m, '_')
0 A____
1 B____
2 A1R__
3 B2___
4 AABB4
dtype: object
适合你的情况
m = df.Col1.str.len().max()
df.Col1 = df.Col1.ljust(m '_')