2014-01-22 63 views
1

如何快速創建包含「文件」列中包含的三個區塊的新列?將字符串解析爲列python pandas/xa0替代空格

收到亂七八糟的數據是這樣

d = { 'File' : pd.Series(['firstname lastname     05/31/1996      9999999999 ', 'FN SometimesMiddileInitial. LN     05/31/1996     9999999999 ']), 
    'Status' : pd.Series([0., 0.]), 
    'Error' : pd.Series([2., 2.])} 
df=pd.DataFrame(d) 

UPDATE 在現實中,我從一個非常混亂的開始excel文件和我的數據有「\ XA0 \ XA0」字符串中的字符之間。 所以我的第一次嘗試看起來像

from pandas import DataFrame, ExcelFile 
import pandas as pd 
location = r'c:/users/meinzerc/Desktop/table.xlsx' 
xls = ExcelFile(location) 
table = xls.parse('Sheet1') 
splitdf = df['File'].str.split('\s*) 

我嘗試將不會在所有的工作。爲什麼?

+0

可能重複的[Pandas DataFrame,我如何將一列分成兩個](http://stackoverflow.com/questions/14745022/pandas-dataframe-how-do-i-split-a-column-into-two) – sashkello

回答

3

你可以使用正則表達式拿起至少兩個空格:

In [11]: df.File.str.split('\s\s+') 
Out[11]: 
0  [firstname lastname, 05/31/1996, 9999999999, ] 
1 [FN SometimesMiddileInitial. LN, 05/31/1996, 9... 
Name: File, dtype: object 

也許是更好的選擇是使用extract(也許有一個整齊的正則表達式!!):

In [12]: df.File.str.extract('\s*(?P<name>.*?)\s+(?P<date>\d+/\d+/\d+)\s+(?P<number>\w+)\s*') 
Out[12]: 
          name  date  number 
0    firstname lastname 05/31/1996 9999999999 
1 FN SometimesMiddileInitial. LN 05/31/1996 9999999999 

[2 rows x 3 columns] 
+0

謝謝安迪。簡單和完美..在實踐中,但是當我在我的excel df上嘗試時,df.values顯示'\ xa0 \ xa0'而不是空白。我從來沒有處理過,所以我試過df.File.str.split('\\ xa0 + \ s * \\ xa0 *')並最終得到它!也許我可以編輯我的原始問題來獲得\ xa0的反饋?另外,我會嘗試提取物!看起來不錯,我喜歡提取,因爲它更加深入! –

+0

@ChetMeinzer這是一個非破壞性空白的拉丁-1代碼點。我擔心你偶爾會被這種事情困擾,所以最好稍後檢查一下結果,看看接下來會發生什麼。另一種選擇可能是首先'.replace('\ xa0','')'。 –

+0

我認爲你是對的。如果我能從那裏得到那個,那麼調整會更加正常。再次感謝! –