2015-04-27 299 views
0

我有一個df,目前有4列。第一列是由_分隔的3個項目的組合。例如:44_title_iphone6_32GB我想要的是44titleiphone6_32gb在他們自己的新列中。但是,我不能在_上做一個簡單的df.split,因爲它會將iphone6和32gb分成兩部分。我怎樣才能做到這一點?另一個問題是這3個項目中的最後一個並不總是一致的,例如。 44_title_iphone5_32gb_white因此,無論我還想在每一個新欄目中輸入數字,標題,說明。熊貓分裂數據框

幫助?

+0

通常的規則:1)原始數據,2)代碼,3)期望的輸出,謝謝。 – EdChum

回答

1

split接受拆分的數量的n參數:

>>> df = pd.DataFrame({"stuff": ["44_title_iphone6_32GB", "44_title_iphone5_32gb_white"]}) 
>>> df 
         stuff 
0  44_title_iphone6_32GB 
1 44_title_iphone5_32gb_white 
>>> df["stuff"].str.split("_", 2) 
0   [44, title, iphone6_32GB] 
1 [44, title, iphone5_32gb_white] 
Name: stuff, dtype: object 

然後,如果我們.apply(pd.Series),我們可以推廣這些以列:

>>> df["stuff"].str.split("_", 2).apply(pd.Series) 
    0  1     2 
0 44 title  iphone6_32GB 
1 44 title iphone5_32gb_white 

UPDATE:

注意這幾天您可以使用expand=True而不是apply(pd.Series)

>>> df["stuff"].str.split("_", 2, expand=True) 
    0  1     2 
0 44 title  iphone6_32GB 
1 44 title iphone5_32gb_white 
+0

我該如何改變0,1,2的列名?我試過這個,它不工作? 'df = df.rename(columns = {「0」:「new_name」},inplace = True)' – user3508494

+0

另外,新的例子。如果這三個元素沒有像上面那樣排列呢?我將如何能夠做到這一點?對於前: '44_title_iphone6_32GB」 'iphone6_32GB_33_title' 'title_ipad_24' @DSM – user3508494

+0

@ user3508494:默認列*號*,而不是字符串。將它們重命名。或者,您可以始終指定:'df.columns = ['a','b','c']'。 – DSM