2016-05-26 2 views
2

Учитывая следующий кадр данных:Pandas Split on '. «

import pandas as pd 
df=pd.DataFrame({'foo':['abc','2. abc','3. abc']}) 
df 

foo 
    abc 
2. abc 
3. abc 

я хотел бы разделить на». 'для получения этого:

foo bar 
     abc 
1  abc 
2  abc 

Заранее спасибо!

ответ

1

вы можете сделайте это с помощью .str.extract() функция:

In [163]: df.foo.str.extract(r'(?P<foo>\d*)[\.\s]*(?P<bar>.*)', expand=True) 
Out[163]: 
    foo bar 
0  abc 
1 2 abc 
2 3 abc 
1

Вы можете использовать str.split, но тогда вам понадобятся значения подкачки, если mask is True от numpy.where. Последний fillna по '' колонке foo:

df1 = (df.foo.str.split('. ', expand=True)) 
df1.columns = ['foo','bar'] 

print (df1) 
    foo bar 
0 abc None 
1 2 abc 
2 3 abc 

mask = df1.bar.isnull() 
print (mask) 
0  True 
1 False 
2 False 
Name: bar, dtype: bool 

df1['foo'], df1['bar'] = np.where(mask, df1['bar'], df1['foo']), 
         np.where(mask, df1['foo'], df1['bar']) 

df1.foo.fillna('', inplace=True) 

print (df1) 
    foo bar 
0  abc 
1 2 abc 
2 3 abc 
1

Если у вас есть папка вы можете поместить временный файл в, вы можете создать файл CSV и перечитать его с новым сепаратором:

df.to_csv('yourfolder/yourfile.csv',index = False) 

df = pd.read_csv('yourfolder/yourfile.csv',sep = '. ')