如何将列表转换为str。 'DataFrame'对象不可调用错误

时间:2019-07-16 06:18:20

标签: python-3.x list dataframe

请让我知道如何将列表转换为str。

我的数据框(df_meta_review1)结构示例:

-----------------------------------------------------
userID    categories                    category_domain(I want a this!)
-----------------------------------------------------
a1010     [pc, game]                    pc,game-A
a1011     [mobile, game, education]     mobile, game, education-A

我已经尝试过以下

1. df_meta_review1['category_domain'] = df_meta_review1['categories'].astype('str')    #error!

2. df_meta_review1['category_domain'] = df_meta_review1(['categories']).apply(','.join)  #error!

3. df_meta_review1['category_domain'] = ",".join(map(str, df_meta_review1(['categories'])))   #error!

2 个答案:

答案 0 :(得分:1)

我已使用以下代码重新创建了您的表

df_meta_review1 = pd.DataFrame([('a101',['pc', 'game']),('a1001', ['mobile', 'game', 'education'])], columns = ['userID', 'categories'])

运行第一段代码不会出错。确定运行时会出错吗?下面是结果表。

  userID                 categories                  category_domain
0   a101                 [pc, game]                   ['pc', 'game']
1  a1001  [mobile, game, education]  ['mobile', 'game', 'education']

如果我运行第二行,也会出现错误。像这样:

TypeError: 'DataFrame' object is not callable

要解决此问题,我从数据框名称后面删除了圆括号,因为错误提示您正在尝试将数据框用作函数(这是可调用的意思)

df_meta_review1['category_domain'] = df_meta_review1['categories'].apply(','.join)

这不再产生错误,输出看起来像:

  userID                 categories        category_domain
0   a101                 [pc, game]                pc,game
1  a1001  [mobile, game, education]  mobile,game,education

我想您正在寻找什么。 对于第三行代码,我得到了错误:

TypeError: 'DataFrame' object is not callable 

同样,从数据帧名称后面删除圆括号,将产生无错误执行的代码。

df_meta_review1['category_domain'] = ",".join(map(str, df_meta_review1['categories']))

但是我认为这不是您想要的。

  userID                 categories                                 category_domain
0   a101                 [pc, game]  ['pc', 'game'],['mobile', 'game', 'education']
1  a1001  [mobile, game, education]  ['pc', 'game'],['mobile', 'game', 'education']

答案 1 :(得分:1)

您可以使用apply函数,该函数遍历数据框并定义一个函数以返回每一行的结果,如下所示:

def app(row):
    return ",".join(row['categories'])

并将其传递给应用功能:

df_meta_review1['category_domain'] = df_meta_review1.apply(lambda x: app(x),axis =1)

输出:

  userID                 categories          category_domain
0   a101                 [pc, game]                  pc,game
1  a1001  [mobile, game, education]    mobile,game,education