【问题标题】:Concat two columns values of dataframe连接数据框的两列值
【发布时间】:2021-02-09 21:36:42
【问题描述】:

我有一个如下的数据框:

     Name  Age
0    Alex   10
1     Bob   12
2  Clarke   13

数据框创建为:

data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'])

我想将两列的字符串连接为:

     Name      Age
0    10 Alex   10 
1    12 Bob    12 
2    13 Clarke 13 

我尝试使用df["Name"] = df["Age"]+" "+df["Name"],结果出现以下错误:

Traceback(最近一次调用最后一次):文件“”,第 1 行,in 文件 "/anaconda3/envs/env1/lib/python3.6/site-packages/pandas/core/ops/common.py", 第 65 行,在 new_method 中 返回方法(自我,其他)文件“/anaconda3/envs/env1/lib/python3.6/site-packages/pandas/core/ops/init.py”, 第 343 行,在包装器中 结果 = 算术运算(左值,右值,运算)文件“/anaconda3/envs/env1/lib/python3.6/site-packages/pandas/core/ops/array_ops.py”, 第 189 行,在算术运算中 res_values = na_arithmetic_op(lvalues, rvalues, op) 文件 "/anaconda3/envs/env1/lib/python3.6/site-packages/pandas/core/ops/array_ops.py", 第 149 行,在 na_arithmetic_op 结果 = masked_arith_op(left, right, op) 文件 "/anaconda3/envs/env1/lib/python3.6/site-packages/pandas/core/ops/array_ops.py", 第 111 行,在 masked_arith_op 中 结果[掩码] = op(xrav[掩码], y) numpy.core._exceptions.UFuncTypeError: ufunc 'add' 不包含 具有签名匹配类型的循环 (dtype(' dtype('

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    由于Age 是int 列,您需要使用astype 将其转换为str

    In [2511]: df['Name'] = df["Age"].astype(str) + " " + df["Name"]
    
    In [2511]: df['Name']
    Out[2511]: 
    0      10 Alex
    1       12 Bob
    2    13 Clarke
    

    【讨论】:

      【解决方案2】:

      Series.str.cat

      df['Name'] = df['Age'].astype(str).str.cat(df['Name'], sep=' ')
      
              Name  Age
      0    10 Alex   10
      1     12 Bob   12
      2  13 Clarke   13
      

      【讨论】:

      • OKey,下次我会说这个答案和我的一样,稍后发布@Ch3steR
      • 好吧,对不起,我理解你的观点,欢迎留言,我投赞成票
      • 无需抱歉,在 SO 中经常发生用户发布相同答案的情况,我对您的评论感到有点惊讶,仅此而已。您发布了很多很酷的答案,我向您学习。这与代表 TBH 无关。我是pandas的贡献者,我也知道一点熊猫:P
      • 它有效,但我只能接受一个答案。已投票。
      【解决方案3】:

      这是一个可能的解决方案:

      df['Name'] = df['Age'].map(str) + ' ' + df['Name']
      

      【讨论】:

      • 它有效,但我只能接受一个答案。已投票。
      【解决方案4】:

      你可以使用:

      df['Name']=df['Age'].apply(lambda x :str(x)) + ' ' + df['Name']

      【讨论】:

      • 它有效,但我只能接受一个答案。已投票。
      【解决方案5】:

      我们可以使用 apply 函数将数据帧“age”列从 int 转换为字符串,然后使用“+”运算符将其连接到“name”列。

      df["name"] = df["age"].apply(str) + " " + df["name"]

      df[“名称”]

      输出看起来像这样

      0 10 亚历克斯 1 12 鲍勃 2 13 克拉克

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-05
        • 2021-11-22
        • 1970-01-01
        • 2016-03-22
        • 2013-08-11
        • 2020-10-13
        • 2020-11-11
        • 2017-02-03
        相关资源
        最近更新 更多