Python Regex以不同的方式相似数据并填充数据帧
我的信息块包含两个10个字符的字母数字代码,格式为Python Regex以不同的方式相似数据并填充数据帧,python,regex,pandas,Python,Regex,Pandas,我的信息块包含两个10个字符的字母数字代码,格式为xxxxx-xxxxx。下面的文本是如何呈现数据的示例。始终会有一个“父”号码和任意数量的“子”号码 修订版:23.4 12345-78901 a:a b:b { 54321-98765 a:a b:b } 12345-99999 a:a b:b { 54321-47382 a:a b:b 7test-38472 a:a b:b } 我们
xxxxx-xxxxx
。下面的文本是如何呈现数据的示例。始终会有一个“父”号码和任意数量的“子”号码
修订版:23.4
12345-78901
a:a
b:b {
54321-98765
a:a
b:b
}
12345-99999
a:a
b:b {
54321-47382
a:a
b:b
7test-38472
a:a
b:b
}
我们的想法是在一个捕获组中正则化第一个数字12345-78901
,在另一个组中正则化第二个数字54321-98765
,这样两个数字都不会出现在同一个正则化搜索中。我的想法是将两个不同的捕获组读入数据帧列。阅读以下文本后的结果如下:
Parent Child
12345-78901 54321-98765
12345-99999 54321-47382
12345-99999 7test-38472
我陷入困境的是如何区分什么是父母,什么是孩子,我的方法是看缩进。代码如下:
df = pd.read_csv(txt, header=None, sep='\\', encoding = "ISO-8859-1")
numA = df[0].str.extractall(r'(.....-.....)')
numB = df[0].str.extractall(r'( .....-.....)')
df_out = pd.concat([numA, numB], axis=1).reset_index(drop=True)
但是,这会将所有数字填充到
numA
中,并将numB
留空,有什么提示吗?您的问题是r'(…-…)'
也与缩进的数字匹配。您可以通过指定行首的确切位置来避免这种情况。比如:
r'(^…-…)'
和r'(^…-…)'
扬抑符
^
代表行的开头。如果您知道字符是数字,最好使用\d
。所以类似于r'(\d{5}-\d{5})
。对于扬抑符,必须设置pandas.Series.str.extractall的多行标志。这是一种使用str.findall
Ex:
s = """12345-78901
a:a
b:b {
54321-98765
a:a
b:b
}
"""
s2 = """12345-99999
a:a
b:b {
54321-47382
a:a
b:b
7test-38472
a:a
b:b
}"""
df = pd.DataFrame({"temp":[s, s2]})
data = df["temp"].str.findall(r"(\w+\-\w+)").apply(lambda x: [{'Parent': x[0], "Child": i} for i in x[1:]]).tolist()
print(pd.DataFrame.from_records(np.concatenate(data)))
Child Parent
0 54321-98765 12345-78901
1 54321-47382 12345-99999
2 7test-38472 12345-99999
输出:
s = """12345-78901
a:a
b:b {
54321-98765
a:a
b:b
}
"""
s2 = """12345-99999
a:a
b:b {
54321-47382
a:a
b:b
7test-38472
a:a
b:b
}"""
df = pd.DataFrame({"temp":[s, s2]})
data = df["temp"].str.findall(r"(\w+\-\w+)").apply(lambda x: [{'Parent': x[0], "Child": i} for i in x[1:]]).tolist()
print(pd.DataFrame.from_records(np.concatenate(data)))
Child Parent
0 54321-98765 12345-78901
1 54321-47382 12345-99999
2 7test-38472 12345-99999
由于某种原因,
数据
会被填充,但当试图将其连接到新的df或打印时,没有显示任何内容。我有点困惑,因为我看不到r'(^…-…)'
和r'(^…-…)'
之间的区别。第二个是空格。如果你标记它,你会看到空格。。。