2017-10-06 36 views
1

我有一個Python數據框,其中包含以下格式的值的列:數字/數字 - 字母數字。例如:2/39-C-19。我想採取這個列中的值並分割它們,並將它們分配給我的數據框中的新列。將Python數據框的內容拆分爲新列

我嘗試了一些正則表達式,但我還沒有找到排除數據幀索引的好方法。正則表達式'(?:\ d *。)?\ d +'給出了列中包括索引在內的所有數字。

所以,這是我從我的數據幀原始數據的例子:

LOCATION 
0 2/39-C-19 
1 130/3-A-09 
2 1/1-B-11 
3 22/5-B-16 
4 1/4-A-24 

我試圖想出一個好辦法,所以我有多個列,這樣來解析值:

Number1 Number2 Letter Number3 
2 39 C 19 
130 3 A 9 
1 1 B 11 
22 5 B 16 
1 4 A 24 

這裏是到目前爲止的代碼我已經寫了:

import pandas as pd 
import re 
raw_data = 'file.csv' 
raw_data_df = pd.read_csv(raw_data) 
location_df = raw_data_df.iloc[:,[1]] 
location_string = str(location_df) 
re_location = re.findall('(?:\d*\.)?\d+', location_string) 
print(re_location) 

就如何更好地去了解有什麼想法這個?我想知道是否我畢竟不需要正則表達式,並且可能需要創建一個循環來遍歷列中的值?

回答

0
In [97]: cols = 'Number1 Number2 Letter Number3'.split() 

In [98]: df[cols] = df.LOCATION.str.extract(r'(\d+)/(\d+)-(\w+)-(\d+)', expand=True) 

In [99]: df 
Out[99]: 
    LOCATION Number1 Number2 Letter Number3 
0 2/39-C-19  2  39  C  19 
1 130/3-A-09  130  3  A  09 
2 1/1-B-11  1  1  B  11 
3 22/5-B-16  22  5  B  16 
4 1/4-A-24  1  4  A  24 

In [107]: df.LOCATION.str.split(pat=r'[/-]', expand=True) 
Out[107]: 
    0 1 2 3 
0 2 39 C 19 
1 130 3 A 09 
2 1 1 B 11 
3 22 5 B 16 
4 1 4 A 24 
+0

謝謝!這正是我正在尋找的。 – mmmgood

+0

我想知道:是否可以使用類似的方法來拆分包含姓氏,名字,首字母(Ex1:Smith,John Ex2:Doe,Jane S)的df列?嘗試了以下方法,該方法適用於包含姓氏,名字和中間首字母的姓名,但NaN只出現在名字和姓氏中。有沒有一種很好的方法來解釋可選的中間初始值? (\ w +),(\ w +)(\ w +)',expand = True) – mmmgood

+0

@mmmgood,是的,我們可以做到這一點,但想想[包含幾個詞的名字](https://www.google.de/amp/www.sheknows.com/parenting/articles/825167/top-double-baby-names-for -girls-and-boys/amp) – MaxU

0

我會盡量把它留給你作爲實現到您的數據幀,但這應該提供區分你的位置字符串到多個項目的簡單方法:

import re 

s = ['2/39-C-19', '130/3-A-09', '1/1-B-11', '22/5-B-16', '1/4-A-24'] 

for i in s: 
    s_new = re.split(r'[/-]',i) 
    print(s_new) 

OUTPUT:

['2', '39', 'C', '19'] 
['130', '3', 'A', '09'] 
['1', '1', 'B', '11'] 
['22', '5', 'B', '16'] 
['1', '4', 'A', '24'] 
+0

謝謝。我很新,很重要。所以,在這種情況下,它看起來像split方法在/和 - 分開。這將是我未來記住的好記號。 – mmmgood

+0

你打賭。是的,這個正則表達式使用字符類來分割'/'和' - '。如果您想要暴露於正則表達式,我會推薦以下視頻,這些幫助我提供了很多幫助:https://www.youtube.com/watch?v=7DG3kCDx53c – rahlf23

相關問題