我有一个Python数据框,其中的列包含以下格式的值:numbers / numbers-letter-numbers。示例:2/39-C-19。我想获取此列中的值并将它们拆分并将它们分配给我的数据帧中的新列。
我尝试了一些正则表达式,但我还没有找到排除数据帧索引的好方法。正则表达式(?:\ 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 :(得分: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
答案 1 :(得分: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)
输出:
['2', '39', 'C', '19']
['130', '3', 'A', '09']
['1', '1', 'B', '11']
['22', '5', 'B', '16']
['1', '4', 'A', '24']