Python Pandas Multindex专栏 [英] Python pandas Multindex column

查看:101
本文介绍了Python Pandas Multindex专栏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

首先,我在jupyter笔记本中使用python 3.50.

First of all, I'm using python 3.50 in a jupyter notebook.

我想创建一个DataFrame以在报表中显示一些数据.我希望它具有两个索引列(如果要引用的术语不正确,请问问.我不习惯与熊猫一起工作).

I want to create a DataFrame for showing some data in a report. I want it to have two index column (Excuse me if the term to refer it is not the correct. I'm not use to work with pandas).

我有可以运行的示例代码:

I have this example code that works:

frame = pd.DataFrame(np.arange(12).reshape(( 4, 3)), 
                  index =[['a', 'a', 'b', 'b'], [1, 2, 1, 2]], 
                  columns =[['Ohio', 'Ohio', 'Ohio'], ['Green', 'Red', 'Green']])

但是当我尝试解决这个问题时,它给了我一个错误:

But when I try to take it to my case, it gives me an error:

cell_rise_Inv= pd.DataFrame([[0.00483211, 0.00511619, 0.00891821, 0.0449637, 0.205753], 
                             [0.00520049, 0.00561577, 0.010993, 0.0468998, 0.207461],
                             [0.00357213, 0.00429087, 0.0132186, 0.0536389, 0.21384],
                             [-0.0021868, -0.0011312, 0.0120546, 0.0647213, 0.224749],
                             [-0.0725403, -0.0700884, -0.0382486, 0.0899121, 0.313639]], 
                            index =[['transition [ns]','transition [ns]','transition [ns]','transition [ns]','transition [ns]'],
                                   [0.0005, 0.001, 0.01, 0.1, 0.5]],
                            columns =[[0.01, 0.02, 0.05, 0.1, 0.5],['capacitance [pF]','capacitance [pF]','capacitance [pF]','capacitance [pF]','capacitance [pF]']])
cell_rise_Inv

---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-89-180a1ad88403> in <module>()
      6                             index =[['transition [ns]','transition [ns]','transition [ns]','transition [ns]','transition [ns]'],
      7                                    [0.0005, 0.001, 0.01, 0.1, 0.5]],
----> 8                             columns =[[0.01, 0.02, 0.05, 0.1, 0.5],['capacitance [pF]','capacitance [pF]','capacitance [pF]','capacitance [pF]','capacitance [pF]']])
      9 cell_rise_Inv

C:\Users\Josele\Anaconda3\lib\site-packages\pandas\core\frame.py in __init__(self, data, index, columns, dtype, copy)
    261                     if com.is_named_tuple(data[0]) and columns is None:
    262                         columns = data[0]._fields
--> 263                     arrays, columns = _to_arrays(data, columns, dtype=dtype)
    264                     columns = _ensure_index(columns)
    265 

C:\Users\Josele\Anaconda3\lib\site-packages\pandas\core\frame.py in _to_arrays(data, columns, coerce_float, dtype)
   5350     if isinstance(data[0], (list, tuple)):
   5351         return _list_to_arrays(data, columns, coerce_float=coerce_float,
-> 5352                                dtype=dtype)
   5353     elif isinstance(data[0], collections.Mapping):
   5354         return _list_of_dict_to_arrays(data, columns,

C:\Users\Josele\Anaconda3\lib\site-packages\pandas\core\frame.py in _list_to_arrays(data, columns, coerce_float, dtype)
   5429         content = list(lib.to_object_array(data).T)
   5430     return _convert_object_array(content, columns, dtype=dtype,
-> 5431                                  coerce_float=coerce_float)
   5432 
   5433 

C:\Users\Josele\Anaconda3\lib\site-packages\pandas\core\frame.py in _convert_object_array(content, columns, coerce_float, dtype)
   5487             # caller's responsibility to check for this...
   5488             raise AssertionError('%d columns passed, passed data had %s '
-> 5489                                  'columns' % (len(columns), len(content)))
   5490 
   5491     # provide soft conversion of object dtypes

AssertionError: 2 columns passed, passed data had 5 columns

有什么想法吗?我不明白为什么该示例起作用,而我的示例却不这样做. :S

Any ideas? I can't understand why the example works and mine don't do it. :S

预先感谢您:).

推荐答案

您的代码和示例之间有一个主要区别:该示例将numpy数组作为输入而不是嵌套列表.实际上,在列表中添加np.array(...)效果很好:

There is one major difference between your code and the example: the example passes a numpy array as the input rather than a nested list. In fact, adding np.array(...) around your list works just fine:


cell_rise_Inv= pd.DataFrame(
        np.array([[0.00483211, 0.00511619, 0.00891821, 0.0449637, 0.205753], 
                  [0.00520049, 0.00561577, 0.010993, 0.0468998, 0.207461],
                  [0.00357213, 0.00429087, 0.0132186, 0.0536389, 0.21384],
                  [-0.0021868, -0.0011312, 0.0120546, 0.0647213, 0.224749],
                  [-0.0725403, -0.0700884, -0.0382486, 0.0899121, 0.313639]]), 
        index=[['transition [ns]'] * 5,
               [0.0005, 0.001, 0.01, 0.1, 0.5]],
        columns=[['capacitance [pF]'] * 5,
                 [0.01, 0.02, 0.05, 0.1, 0.5]])

我缩短了索引中重复的字符串,并交换了索引级别的顺序,但这些变化不大.

I shortened the repeated strings in the index and swapped the order of the index levels, but those are not significant changes.

编辑 做了一点调查.如果您传递一个嵌套列表(没有np.array调用),则即使columns是一维列表,该调用也可以在没有columns的情况下运行.由于某些原因,除非输入是ndarray,否则两个元素的嵌套列表不会被解释为多索引.

EDIT Did a little investigating. If you pass in a nested list (without the np.array call), the call will work without columns and even if columns is a 1D list. For some reason the nested list of two elements is not being interpreted as a multiindex unless the input is an ndarray.

我根据此问题向熊猫提交了 issue#14467 .

I filed issue #14467 with pandas based on this question.

这篇关于Python Pandas Multindex专栏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆