2017-09-07 4 views
1

の列をマージするとき、私は、このデータフレームを持っている:エラーパンダのデータフレーム

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

は、私は1つの列に「Telefone1」と「Telefone2」をマージしたいです。それは次のようになります。

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

そして、私はこのトレースバック取得しています:私はこれを使用していることについては

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

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 

は、私がここで間違って何をやっているの?文字列アクセサの

+0

カラム名にタイプミスがあります。 '' Telefone1 ''という名前の2つのカラムが、 '' Telefone1''と '' Telefone2''を追加しようとしています。これを修正したところ、あなたのコードは正常に動作しました。 – piRSquared

+0

私はあなたがastypeの代わりに.mapの機能を使うべきだと思うので、このコードを試してみてください:dataframe ["Telefone"] = df ["Telefone1"] map(str)+ df ["Telefone1"]とあなたのカラム名はtelefone1 –

+0

@piRSquared実際に私はスタックオーバーフローでここに入力ミスをもたらした。ここに入力するときに間違いを犯しました(すでにここで修正済みです)。私のコードでは正解で、そのトレースバックを取得していました。 – abutremutante

答えて

1
>>> (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')) 

これはあなたのサンプルデータで動作します。エラーがある場合は、各フィールドの長さを示す新しい列を作成し、この値をソートします。データエラーが発生する可能性があります。

0

利用猫()関数:

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

ありがとうございますが、これは別のエラーになります:AttributeError: 'DataFrame'オブジェクトに 'str'属性がありません – abutremutante

+0

@abutremutante、編集された回答をチェックアウト –

1
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 

オプション2

df.apply

df = df.apply(','.join, 1).to_frame(name='Telefone') 
df 
          Telefone 
CNPJ         
44167450000149 1332385314,1332385314 
56095862000108 2125439090,2125439090 
59664391000191 1143990005,1143990005