2015-04-27 301 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