import re
import pandas as pd
import numpy as np
df = pd.DataFrame({'Data': ['A15', 'abc', 'A25', 50, 'abc', 'A30', 20, 'def', 'A4', 'hijk', 'A', 10, 'mnop']})
转换为列表:
flat_list = df['Data'].tolist()
迭代列表,如果元素匹配 Ad+ 添加新子列表,否则附加到最后一个子列表:
nested_list = []
while len(flat_list) > 0:
element = flat_list.pop(0)
if re.fullmatch("Ad*", str(element)):
nested_list.append([element])
else:
nested_list[-1].append(element)
如果子列表只有两项,则列出 'Number' 为 np.NaN 的字典:
as_records = [
{'Name': l[0], 'Number': l[1], 'text': l[2]} if len(l) == 3 else {'Name': l[0], 'Number': np.NaN, 'text': l[1]}
for l in nested_list]
转换为数据帧:
df_out = pd.DataFrame(as_records)
哪个返回:
Name Number text
0 A15 NaN abc
1 A25 50.0 abc
2 A30 20.0 def
3 A4 NaN hijk
4 A 10.0 mnop