我想在DataFrame的特定列中拆分我拥有的字符串,从两个新系列中获取数字,并将值分配给四个新列。
在进行任何修改之前,Saison的“得分”栏目如下所示:
0 \n3:2 (1:1) \n
1 \n0:2 (0:2) \n
2 \n1:1 (1:0) \n
3 \n1:1 (1:1) \n
4 \n2:0 (2:0) \n
我想要的输出是:
Tore_Heim Tore_Auswärts Tore_Heim_HZ Tore_Auswärts_HZ
0 3 2 1 1
1 0 2 0 2
2 1 1 1 0
3 1 1 1 1
4 2 0 2 0
我找到了一个使用列表理解的解决方案:
scores["Tore_Heim"] = pd.DataFrame([re.findall("\d+", scores[0][i]) for i in range(len(scores))]).loc[:, 0]
scores["Tore_Auswärts"] = pd.DataFrame([re.findall("\d+", scores[0][i]) for i in range(len(scores))]).loc[:, 1]
scores["Tore_Heim_HZ"] = pd.DataFrame([re.findall("\d+", scores[1][i]) for i in range(len(scores))]).loc[:, 0]
scores["Tore_Auswärts_HZ"] = pd.DataFrame([re.findall("\d+", scores[1][i]) for i in range(len(scores))]).loc[:, 1]
第二个问题是第2行和第3行是否可以组合成一个。
答案 0 :(得分:1)
您可以使用str.extractall
+ unstack
:
df
Col
0 \n3:2 (1:1) \n
1 \n0:2 (0:2) \n
2 \n1:1 (1:0) \n
3 \n1:1 (1:1) \n
4 \n2:0 (2:0) \n
v = df.Col.str.extractall('(\d+)', flags=re.M).unstack()
v.columns = ['Tore_Heim', 'Tore_Auswärts', 'Tore_Heim_HZ', 'Tore_Auswärts_HZ']
v
Tore_Heim Tore_Auswärts Tore_Heim_HZ Tore_Auswärts_HZ
0 3 2 1 1
1 0 2 0 2
2 1 1 1 0
3 1 1 1 1
4 2 0 2 0
要转换为数字类型,请在列之间应用pd.to_numeric
-
v = v.apply(pd.to_numeric, errors='coerce')
或者,执行astype
转化 -
v = v.astype(float) # .astype(int) will work if you don't have NaNs in your data