代码之家  ›  专栏  ›  技术社区  ›  aabujamra

合并数据帧的列时出错

  •  1
  • aabujamra  · 技术社区  · 8 年前

                     Telefone1   Telefone2
    CNPJ                                  
    44167450000149  1332385314  1332385314
    56095862000108  2125439090  2125439090
    59664391000191  1143990005  1143990005
    

    我想把“Telefone1”和“Telefone2”合并到一个列中。它应该是这样的:

                    Telefone
    CNPJ                                  
    44167450000149  1332385314,1332385314
    56095862000108  2125439090,2125439090
    59664391000191  1143990005,1143990005
    

    df['Telefone']=df.Telefone1.astype(str)+","+df.Telefone2.astype(str)
    

    我得到了这个回溯:

    Traceback (most recent call last):
    File "/file.py", line 507, in <module>
    'file')
    File "file.py", line 347, in function
    df['Telefone']=df.Telefone1.astype(str)+","+df.Telefone2.astype(str)
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pandas/core/frame.py", line 2357, in __setitem__
    self._set_item(key, value)
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pandas/core/frame.py", line 2424, in _set_item
    NDFrame._set_item(self, key, value)
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pandas/core/generic.py", line 1464, in _set_item
    self._data.set(key, value)
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pandas/core/internals.py", line 3418, in set
    self.insert(len(self.items), item, value)
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pandas/core/internals.py", line 3519, in insert
    placement=slice(loc, loc + 1))
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pandas/core/internals.py", line 2518, in make_block
    return klass(values, ndim=ndim, fastpath=fastpath, placement=placement)
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pandas/core/internals.py", line 1663, in __init__
    placement=placement, **kwargs)
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pandas/core/internals.py", line 90, in __init__
    len(self.mgr_locs)))
    ValueError: Wrong number of items passed 4, placement implies 1
    

    我做错了什么?

    3 回复  |  直到 8 年前
        1
  •  1
  •   Alexander    8 年前
    >>> (df.iloc[:, 0].astype(str) + ',' + df.iloc[:, 1].astype(str)).to_frame('Telephone')
                                 Telefone
    CNPJ                                 
    44167450000149  1332385314,1332385314
    56095862000108  2125439090,2125439090
    59664391000191  1143990005,1143990005
    

    (df.loc[:, 'Telefone1'].astype(str) + ',' + df.loc[:, 'Telefone2'].astype(str)).to_frame('Telefone'))
    

    这适用于您的示例数据。如果有错误,请创建一个新列来指示每个字段的长度,并根据此值排序。可能会出现数据错误。

        2
  •  1
  •   cs95 abhishek58g    8 年前
    df = df.applymap(str)
    

    选项1

    str.cat

    df = pd.DataFrame({'Telefone' : df.Telefone1.str.cat(df.Telefone2, sep=',')}, index=df.index)
    df
                                 Telefone
    CNPJ                                 
    44167450000149  1332385314,1332385314
    56095862000108  2125439090,2125439090
    59664391000191  1143990005,1143990005
    

    df.apply

    df = df.apply(','.join, 1).to_frame(name='Telefone')
    df 
                                 Telefone
    CNPJ                                 
    44167450000149  1332385314,1332385314
    56095862000108  2125439090,2125439090
    59664391000191  1143990005,1143990005
    
        3
  •  0
  •   Def_Os    8 年前

    使用字符串访问器的cat()函数:

    df = df.astype(str)
    df['Telefone'] = df['Telefone1'].str.cat(df['Telefone2'])