我有一个数据帧列,其中偶尔插入了元组。我想将所有这些元组连接到一个由','
分隔的字符串中。
EX
Data People
A XYZ
B ABX,LMN
C ('OPP', 'GGG')
D OAR
我只是在这里尝试“定位”元组并将其转换为提供以下数据框的字符串:
Data People
A XYZ
B ABX,LMN
C OPP,GGG
D OAR
df['People'] = df['People'].apply(','.join)
我尝试过此操作,但最终在所有'OK'字符串的每个字符之间插入逗号。
答案 0 :(得分:1)
如果必须的话,可以执行以下操作。
df['People'] = df['People'].apply(lambda x: ', '.join(x) if isinstance(x,tuple) else x)
输出:
Data People
0 A XYZ
1 B ABX, LMN
2 C OPP, GGG
3 D QAR
答案 1 :(得分:1)
这可能不是最优雅的解决方案:
df = pd.DataFrame({'A': [1, 2, 3, 4], 'B': ['AA', 'ABC, LMN', ('XYZ', 'PQR'), 'OLA']})
# Output
A B
0 1 AA
1 2 ABC, LMN
2 3 (XYZ, PQR)
3 4 OLA
df['B'].apply(lambda x: ','.join([val for val in x]) if isinstance(x, tuple) else x)
# Output
0 AA
1 ABC, LMN
2 XYZ,PQR
3 OLA
Name: B, dtype: object
答案 2 :(得分:0)
通过使用apply
在map
上创建掩码True
,可以避免tuple
。使用此掩码可以对具有元组的行进行切片,并直接在其上使用str.join
。
m = df.People.map(type).eq(tuple)
df.loc[m, 'People'] = df.loc[m, 'People'].str.join(',')
Out[2206]:
Data People
0 A XYZ
1 B ABX,LMN
2 C OPP,GGG
3 D OAR