簡體   English   中英

TypeError:pd.merge python中需要一個整數

[英]TypeError: an integer is required in pd.merge python

我正在嘗試組合兩個熊貓數據幀,如下所示

df_aviris

            0    1    2         3          4
0         0.0  0.0  0.0  482636.5  4155009.5
1         0.0  0.0  0.0  482637.5  4155009.5
2         0.0  0.0  0.0  482638.5  4155009.5
3         0.0  0.0  0.0  482639.5  4155009.5
4         0.0  0.0  0.0  482640.5  4155009.5
5         0.0  0.0  0.0  482641.5  4155009.5
6         0.0  0.0  0.0  482642.5  4155009.5
7         0.0  0.0  0.0  482643.5  4155009.5
8         0.0  0.0  0.0  482644.5  4155009.5
       ...  ...  ...       ...        ...

16730996  0.0  0.0  0.0  485932.5  4149940.5
16730997  0.0  0.0  0.0  485933.5  4149940.5
16730998  0.0  0.0  0.0  485934.5  4149940.5
16730999  0.0  0.0  0.0  485935.5  4149940.5
[16731000 rows x 5 columns]

df_geomap

              0      1      2         x          y
0         255.0  255.0  255.0  477642.5  4158373.5
1         255.0  255.0  255.0  477643.5  4158373.5
2         255.0  255.0  255.0  477644.5  4158373.5
3         255.0  255.0  255.0  477645.5  4158373.5
4         255.0  255.0  255.0  477646.5  4158373.5
5         255.0  255.0  255.0  477647.5  4158373.5
6         255.0  255.0  255.0  477648.5  4158373.5
         ...    ...    ...       ...        ...

79026747  255.0  255.0  255.0  487218.5  4150124.5
79026748  255.0  255.0  255.0  487219.5  4150124.5
79026749  255.0  255.0  255.0  487220.5  4150124.5
[79026750 rows x 5 columns]

我試圖基於x和y合並這兩個。

DFinal = pd.merge(df_aviris,df_geomap,how='outer',on=['x','y'],left_index=False,right_index=False,copy=False)

並同時使用concat

DFinal = pd.concat([df_aviris.set_index(['x','y']),df_geomap.set_index(['x','y'])],join='inner',axis=1)

但是出現如下錯誤

Traceback (most recent call last):
  File "pandas/index.pyx", line 154, in pandas.index.IndexEngine.get_loc (pandas/index.c:4279)
  File "pandas/src/hashtable_class_helper.pxi", line 404, in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:8543)
TypeError: an integer is required
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/indexes/base.py", line 2134, in get_loc
    return self._engine.get_loc(key)
  File "pandas/index.pyx", line 132, in pandas.index.IndexEngine.get_loc (pandas/index.c:4433)
  File "pandas/index.pyx", line 156, in pandas.index.IndexEngine.get_loc (pandas/index.c:4363)
KeyError: 'x'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "pandas/index.pyx", line 154, in pandas.index.IndexEngine.get_loc (pandas/index.c:4279)
  File "pandas/src/hashtable_class_helper.pxi", line 404, in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:8543)
TypeError: an integer is required
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2881, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-38-0a4bfba1b1f4>", line 1, in <module>
    DFinal = pd.concat([df_aviris.set_index(['x','y']),df_geomap.set_index(['x','y'])],join='inner',axis=1)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/frame.py", line 2917, in set_index
    level = frame[col]._values
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/frame.py", line 2059, in __getitem__
    return self._getitem_column(key)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/frame.py", line 2066, in _getitem_column
    return self._get_item_cache(key)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/generic.py", line 1386, in _get_item_cache
    values = self._data.get(item)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/internals.py", line 3543, in get
    loc = self.items.get_loc(item)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/indexes/base.py", line 2136, in get_loc
    return self._engine.get_loc(self._maybe_cast_indexer(key))
  File "pandas/index.pyx", line 132, in pandas.index.IndexEngine.get_loc (pandas/index.c:4433)
  File "pandas/index.pyx", line 156, in pandas.index.IndexEngine.get_loc (pandas/index.c:4363)
KeyError: 'x'

我正在使用python 3.6.1

df_aviris沒有xy列的df_aviris

因此需要outer聯接:

DFinal = pd.merge(df_aviris,df_geomap,how='outer',left_on=[3,4], right_on=['x','y'])

#default outer join, join='outer' can be omit
DFinal = pd.concat([df_aviris.set_index([3,4]),
                    df_geomap.set_index(['x','y'])],axis=1)
           .reset_index()

對於inner聯接:

#default inner join, how='inner' can be omit
DFinal = pd.merge(df_aviris,df_geomap,left_on=[3,4], right_on=['x','y'])

DFinal = pd.concat([df_aviris.set_index([3,4]),
                    df_geomap.set_index(['x','y'])],join='inner',axis=1)
           .reset_index()

編輯:

我無法模擬:

TypeError:必須為整數

也許有助於升級熊貓。

或者,如果在浮點數之后只有一個數字,則可以使用一點技巧-將其乘以10然后轉換為int ,然后merge除以10

df_aviris1 = df_aviris.mul(10).astype(int)
df_geomap1 = df_geomap.mul(10).astype(int)

#choose method what need
DFinal = pd.merge(df_aviris1,df_geomap1,how='outer',left_on=[3,4], right_on=['x','y'])

DFinal = DFinal.div(10)

使用astype(int)將其轉換為整數類型,如下所示:

DFinal = pd.merge(df_aviris.astype(int),df_geomap.astype(int),how='outer',on=['x','y'],left_index=False,right_index=False,copy=False)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM