pd.MultiIndex.from_tuples正在将nan值添加到表中

时间:2018-08-21 11:07:05

标签: python pandas

更改df中的原始值 我有一个如下所示的df,是在执行许多计算后获得的:

Acc Ep  Direction   Ttest_t Ttest_s T_count TPNL    TS  TotalPNL    TotalS
A   KA  B          -10.62   -0.21   3   -625.52     14.59   -667.61  24.28
B   EF  B          -4.25    2.63    2   -448.08     26.88   -448.08  26.88
D   SE  B          -3.94    8.63    4   -533.70     75.41   -550.26  128.38
G   UA  S          -6.85    -0.09   3   -563.83     19.58   -411.06  21.54
N   EL  B          -5.39    2.84    2   -2230.23    464.56  -6641.1 1232.79
N   SD  B          -4.70    -0.21   2   -1057.0    117.45   -6641.1 1232.79
S   UD  B          -5.48    0.18    33  1416.69   3981.32   955.34  4475.32

然后我按以下方式使用MultiIndex函数:

columns = [('Index','Acc'), ('Index','Ep'), ('EPNL','Ttest_t'), ('EPNL','TPNL'), ('EPNL','TotalPNL'), ('SPaid','Ttest_s'), ('SPaid','TS'), ('SPaid','TotalS'), ('Other','Direction'), ('Other','T_count')]
temp3.columns=pd.MultiIndex.from_tuples(columns)

这确实给了我想要的表格格式。但是,它将空值添加到我的表中(如下所示)

Index     EPNL                     SPaid                Other   O
Acc Epic  Ttest_t   TPNL    TotalPNL   Ttest_s  TS  TotalS  Direction   t
NaN NaN   NaN   NaN NaN     NaN        NaN      NaN  NaN    h
NaN NaN   NaN   NaN NaN     NaN        NaN      NaN  NaN    e
NaN NaN   NaN   NaN NaN     NaN        NaN      NaN  NaN    r
NaN NaN   NaN   NaN NaN     NaN        NaN      NaN  NaN    T
NaN NaN   NaN   NaN NaN     NaN        NaN      NaN  NaN    r
NaN NaN   NaN   NaN NaN     NaN        NaN      NaN  NaN    a
NaN NaN   NaN   NaN NaN     NaN        NaN      NaN  NaN    d
NaN NaN   NaN   NaN NaN     NaN        NaN      NaN  NaN    e
NaN NaN   NaN   NaN NaN     NaN        NaN      NaN  NaN    
NaN NaN   NaN   NaN NaN     NaN        NaN      NaN  NaN    c
NaN NaN   NaN   NaN NaN     NaN        NaN      NaN  NaN    o
NaN NaN   NaN   NaN NaN     NaN        NaN      NaN  NaN    u
NaN NaN   NaN   NaN NaN     NaN        NaN      NaN  NaN    n
NaN NaN   NaN   NaN NaN     NaN        NaN      NaN  NaN    t
A   KA    B    -10.62   -0.21   3   -625.52 14.59   -667.61 24.28
B   EF    B    -4.25    2.63    2   -448.08 26.88   -448.08 26.88
D   SE    B   -3.94 8.63    4   -533.70 75.41   -550.26 128.38
G   UA    S   -6.85 -0.09   3   -563.83 19.58   -411.06 21.54
N   EL    B   -5.39 2.84    2   -2230.23    464.56  -6641.17    1232.79
N   SD    B   -4.70 -0.21   2   -1057.02    117.45  -6641.17    1232.79
S   UD    B   -5.48 0.18    33  1416.69 3981.32 955.34  4475.32

关于为什么这样做的任何想法。我希望它不添加值(我不想使用dropna)

1 个答案:

答案 0 :(得分:1)

因为字符串是可迭代的,所以('Other' 'T_count')被转换为
 'O','t','h','e',r',' ','T','_','c','o','u','n','t' 并创建了16级MultiIndex

解决方案是像,一样添加('Other', 'T_count')


columns = [('Index','Acc'), ('Index','Ep'), 
           ('EPNL','Ttest_t'), ('EPNL','TPNL'), 
           ('EPNL','TotalPNL'), ('SPaid','Ttest_s'), 
           ('SPaid','TS'), ('SPaid','TotalS'), 
           ('Other','Direction'), ('Other','T_count')]
temp3.columns=pd.MultiIndex.from_tuples(columns)
print (temp3)
  Index        EPNL                   SPaid                       Other  \
    Acc  Ep Ttest_t   TPNL TotalPNL Ttest_s       TS   TotalS Direction   
0     A  KA       B -10.62    -0.21       3  -625.52    14.59   -667.61   
1     B  EF       B  -4.25     2.63       2  -448.08    26.88   -448.08   
2     D  SE       B  -3.94     8.63       4  -533.70    75.41   -550.26   
3     G  UA       S  -6.85    -0.09       3  -563.83    19.58   -411.06   
4     N  EL       B  -5.39     2.84       2 -2230.23   464.56  -6641.10   
5     N  SD       B  -4.70    -0.21       2 -1057.00   117.45  -6641.10   
6     S  UD       B  -5.48     0.18      33  1416.69  3981.32    955.34   


   T_count  
0    24.28  
1    26.88  
2   128.38  
3    21.54  
4  1232.79  
5  1232.79  
6  4475.32