当要拆分的字符串数不确定时,在分隔符上拆分 Dataframe 列
Split Dataframe column on delimiter when number of strings to split is not definite
我有一个数据框如下:
A B
0 33590104 3359017;3359011;3359031
1 53340311 5334012
2 160750035 16075131;16075132;16075135;16075046
3 10510044 1051012;1051097;1051010;1051051;1051089;105106...
4 51540061 5154036
我希望 A 中的每个值都有行,B 中的每个值由“;”分隔如下图
A B
33590104 3359017
33590104 3359011
33590104 3359031
53340311 5334012
160750035 16075131
160750035 16075132
160750035 16075135
160750035 16075046
等等....
我的想法是先把B列的字符串转成列表。例如:
A B
0 33590104 [3359017,3359011,3359031]
1 53340311 [5334012]
2 160750035 [16075131,16075132,16075135,16075046]
然后使用分解函数。但我不知道如何使用定界符 ';' 转换字符串到一个列表。我也不知道到底有多少字符串被';'分隔在每一行中。正如您在上面的示例中所见,每一行都不同。
您可以在 .map()
方法中使用字符串 .split()
将字符串转换为列表:
df['B'] = df['B'].map(lambda x: x.split(';'))
然后使用.explode()
:
df.explode('B').reset_index(drop=True)
df['B'] = df['B'].str.split(';')
df.explode('B', ignore_index=True)
或
df.assign(B=df['B'].str.split(';')).explode('B', ignore_index=True)
输出:
A B
0 33590104 3359017
1 33590104 3359011
2 33590104 3359031
3 53340311 5334012
4 160750035 16075131
5 160750035 16075132
6 160750035 16075135
7 160750035 16075046
8 10510044 1051012
9 10510044 1051097
10 10510044 1051010
11 10510044 1051051
12 10510044 1051089
13 10510044 105106...
14 51540061 5154036
我有一个数据框如下:
A B
0 33590104 3359017;3359011;3359031
1 53340311 5334012
2 160750035 16075131;16075132;16075135;16075046
3 10510044 1051012;1051097;1051010;1051051;1051089;105106...
4 51540061 5154036
我希望 A 中的每个值都有行,B 中的每个值由“;”分隔如下图
A B
33590104 3359017
33590104 3359011
33590104 3359031
53340311 5334012
160750035 16075131
160750035 16075132
160750035 16075135
160750035 16075046
等等....
我的想法是先把B列的字符串转成列表。例如:
A B
0 33590104 [3359017,3359011,3359031]
1 53340311 [5334012]
2 160750035 [16075131,16075132,16075135,16075046]
然后使用分解函数。但我不知道如何使用定界符 ';' 转换字符串到一个列表。我也不知道到底有多少字符串被';'分隔在每一行中。正如您在上面的示例中所见,每一行都不同。
您可以在 .map()
方法中使用字符串 .split()
将字符串转换为列表:
df['B'] = df['B'].map(lambda x: x.split(';'))
然后使用.explode()
:
df.explode('B').reset_index(drop=True)
df['B'] = df['B'].str.split(';')
df.explode('B', ignore_index=True)
或
df.assign(B=df['B'].str.split(';')).explode('B', ignore_index=True)
输出:
A B
0 33590104 3359017
1 33590104 3359011
2 33590104 3359031
3 53340311 5334012
4 160750035 16075131
5 160750035 16075132
6 160750035 16075135
7 160750035 16075046
8 10510044 1051012
9 10510044 1051097
10 10510044 1051010
11 10510044 1051051
12 10510044 1051089
13 10510044 105106...
14 51540061 5154036