2017-10-06 275 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