简体   繁体   English

pandas 中的 astype(str) 引发 TypeError

[英]astype(str) in pandas raise TypeError

I have a simple dataframe produced an error stdcos.head() produce我有一个简单的 dataframe 产生错误stdcos.head()产生

  PartNo  Cost
0    180  8.95
1    213  0.32
2    215  2.77
3    216  3.02
4    218  1.37

stdcos.dtypes returns stdcos.dtypes返回

PartNo     object
Cost      float64
dtype: object

Why in this case can raise a TypeError for stdcos['PartNo'].astype(str) ?为什么在这种情况下会为stdcos['PartNo'].astype(str)引发 TypeError ? Is it possible to have something to do with the weird PartNo dtype?是否有可能与奇怪的 PartNo dtype 有关?


Sorry, this is the error message对不起,这是错误信息

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-48-791196d10a7a> in <module>
----> 1 stdcos['PartNo'].astype(str)

~\AppData\Local\Continuum\miniconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
   2774                 if self.columns.nlevels > 1:
   2775                     return self._getitem_multilevel(key)
-> 2776                 return self._get_item_cache(key)
   2777 
   2778         # Do we have a slicer (on rows)?

~\AppData\Local\Continuum\miniconda3\lib\site-packages\pandas\core\generic.py in _get_item_cache(self, item)
   3584         res = cache.get(item)
   3585         if res is None:
-> 3586             values = self._data.get(item)
   3587             res = self._box_item_values(item, values)
   3588             cache[item] = res

~\AppData\Local\Continuum\miniconda3\lib\site-packages\pandas\core\internals\managers.py in get(self, item)
    966                         raise ValueError("cannot label index with a null key")
    967 
--> 968             return self.iget(loc)
    969         else:
    970 

~\AppData\Local\Continuum\miniconda3\lib\site-packages\pandas\core\internals\managers.py in iget(self, i)
    983         Otherwise return as a ndarray
    984         """
--> 985         block = self.blocks[self._blknos[i]]
    986         values = block.iget(self._blklocs[i])
    987 

TypeError: only integer scalar arrays can be converted to a scalar index

Thanks to @Juanpa.arrivillaga, I found the bug.感谢@Juanpa.arrivillaga,我发现了这个错误。

It comes from stdcos.columns = [['PartNo', 'Cost']]它来自stdcos.columns = [['PartNo', 'Cost']]

So the column name is actually nested, but for some reason it display like a flat ones in jupyter notebook.所以列名实际上是嵌套的,但由于某种原因,它在 jupyter notebook 中显示得像一个扁平的。

Changing it back to stdcos.columns = ['PartNo', 'Cost'] fixed the issue.将其改回stdcos.columns = ['PartNo', 'Cost']解决了这个问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM