将元组出现转换为dataframe列中的字符串

时间:2019-06-25 17:55:39

标签: python pandas

我有一个数据帧列,其中偶尔插入了元组。我想将所有这些元组连接到一个由','分隔的字符串中。

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'字符串的每个字符之间插入逗号。

3 个答案:

答案 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)

通过使用applymap上创建掩码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