将Python数据框架的内容拆分为新列

将Python数据框架的内容拆分为新列,python,regex,parsing,dataframe,multiple-columns,Python,Regex,Parsing,Dataframe,Multiple Columns,我有一个Python数据框架,其中一列包含以下格式的值:数字/数字字母数字。示例:2/39-C-19。我希望获取此列中的值并将其拆分,然后将它们分配给数据框中的新列 我尝试了一些正则表达式,尽管我还没有找到排除dataframe索引的好方法。正则表达式“(?:\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

我有一个Python数据框架,其中一列包含以下格式的值:数字/数字字母数字。示例:2/39-C-19。我希望获取此列中的值并将其拆分,然后将它们分配给数据框中的新列

我尝试了一些正则表达式,尽管我还没有找到排除dataframe索引的好方法。正则表达式“(?:\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)
关于如何最好地进行这件事,你有什么想法吗?我想知道我到底是否不需要正则表达式,也许需要创建一个循环来迭代列中的值

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


至于在数据帧中的实现,我将由您决定,但这应该提供一种将位置字符串拆分为多个项目的简单方法:

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)
输出:

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

至于在数据帧中的实现,我将由您决定,但这应该提供一种将位置字符串拆分为多个项目的简单方法:

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)
输出:

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

非常感谢。我是个新手。因此,在本例中,split方法似乎是在/和-字符上进行拆分。这将是我将来记住的好记法。当然。是的,这个正则表达式使用字符类在“/”和“-”上进行拆分。如果你想了解正则表达式,我会推荐以下视频,这些视频帮了我大忙:谢谢。我是个新手。因此,在本例中,split方法似乎是在/和-字符上进行拆分。这将是我将来记住的好记法。当然。是的,这个正则表达式使用字符类在“/”和“-”上进行拆分。如果你想了解正则表达式,我会推荐以下视频,这些视频帮了我大忙:谢谢!这正是我所要寻找的。我想知道:是否可以使用类似的方法来拆分包含姓氏、名字、首字母缩写的df列(Ex1:Smith,John Ex2:Doe,Jane S)?作者尝试了以下方法,该方法适用于包含姓、名和中间首字母的名称,尽管NaN出现在仅包含姓和名的名称中。有没有一个好方法来解释可选的中间首字母?cols2='Last\u name First\u name Middle'.split()name\u df[cols2]=name\u df.name.str.extract(r'(\w+)(\w+)(\w+)(\w+),[expand=True)@mmmgood,是的,我们可以这样做,但是想想可能有一个更有效的正则表达式来拆分name列,但我想到了以下内容:r'(\w+?\s?\w+\s+),(\w+-\w+)\w(\s?\w+)\w?\w?\w?)\w?\w?\w?\w谢谢!这正是我所要寻找的。我想知道:是否可以使用类似的方法来拆分包含姓氏、名字、首字母缩写的df列(Ex1:Smith,John Ex2:Doe,Jane S)?作者尝试了以下方法,该方法适用于包含姓、名和中间首字母的名称,尽管NaN出现在仅包含姓和名的名称中。有没有一个好方法来解释可选的中间首字母?cols2='Last\u name First\u name Middle'.split()name\u df[cols2]=name\u df.name.str.extract(r'(\w+)(\w+)(\w+)(\w+),expand=True)@mmmgood,是的,我们可以这样做,但想想可能有一个更有效的正则表达式来拆分name列,但我想出了以下结果:r'(\w+?\s?\w+\w+),(\w+-?\w+)\w(\s?\w+)