2016-10-02 108 views
3

我在Python中使用熊貓庫,我試圖增加一個文本列的長度都是相同的長度。我試圖通過添加一個特定的字符(這將通常是白色空間,在本例中我將使用「_」)多次,直到達到該列的最大長度。如何在熊貓的字符串末尾添加特定數量的字符?

例如:

Col1_Before

A 
B 
A1R 
B2 
AABB4 

Col1_After

A____ 
B____ 
A1R__ 
B2___ 
AABB4 

到目前爲止,我已經走到這一步(使用上表爲例子)。這是下一部分(以及我堅持的部分)。

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'] 

我可能沒有解釋好自己,因爲我還在學習。如果這是令人困惑的讓我知道,我會澄清。

回答

2

不會產生額外列:

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 
+0

感謝。作爲一個功能添加在一次運行多個列,它的工作魅力。 – user3601042

3

它不是最熊貓樣的解決方案,但你可以嘗試以下方法:

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 
5

考慮pd.Seriess

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 '_') 
+0

我的確喜歡這個答案。我從來沒有考慮過使用一個系列。我需要多次運行這個過程,這使我傾向於另一種解決方案。 – user3601042

+0

@ user3601042在pandas中,數據框中的每一列都是一系列的。 df.Col1是一個系列。這適用於你的問題:'m = df.Col1.str.len()。max()'然後'df.Col1 = df.Col1.str.ljust(m,'_')'我不在乎關於答案的選擇,但我很在乎你知道如何使用這個答案。我會更新我的帖子。 – piRSquared

+0

這確實很有意義。你的回答改變了我的思維方式。我明白每一列都是一系列的。然而,從來沒有出現問題的背景下,以及如何使用它來構建這樣的問題的解決方案(我猜猜自己的缺點)。那麼你可能已經意識到了答案的重要性。我感謝你的時間。謝謝。 – user3601042

相關問題