2017-01-18 74 views
2

我有一系列normal_row哪個索引的值是:熊貓改變索引數據類型

Int64Index([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
      ... 
      910, 911, 912, 913, 914, 915, 916, 917, 918, 919], 
      dtype='int64', length=919) 

我有一個數據幀resultp

resultp.index 

返回

Int64Index([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
      ... 
      910, 911, 912, 913, 914, 915, 916, 917, 918, 919], 
      dtype='int64', length=919) 
然而

resultp.loc[14].index 

回報

Index([u'1', u'2', u'3', u'4', u'5', u'6', u'7', u'8', u'9', u'10', 
     ... 
     u'910', u'911', u'912', u'913', u'914', u'915', u'916', u'917', u'918', 
     u'919'], 
     dtype='object', length=919) 

這是當

resultp.mul(normal_row, axis = 1) 

返回一個數據幀充滿了 '男' 值becasue創造的問題。數據幀的形狀也從(919,919)變爲(919,1838)

似乎出現這種情況是因爲索引類型在操作過程中發生了變化。這怎麼解決?爲什麼大熊貓不斷改變索引類型,索引類型不應該和原始索引保持一樣嗎?

回答

1

resultp.loc[14].index是字符串。當您致電loc[14]返回索引值爲14的行時。這種最終被一系列對象,其索引等於resultp

Index([u'1', u'2', u'3', u'4', u'5', u'6', u'7', u'8', u'9', u'10', 
     ... 
     u'910', u'911', u'912', u'913', u'914', u'915', u'916', u'917', u'918', 
     u'919'], 
     dtype='object', length=919) 

此列指示該列是字符串。


考慮以下對象

idx = pd.RangeIndex(0, 5) 
col = idx.astype(str) 
resultp = pd.DataFrame(np.random.rand(5, 5), idx, col) 
normal_row = pd.Series(np.random.rand(5), resultp.index) 

注意col看起來一樣idx但鍵入str

print(resultp) 

      0   1   2   3   4 
0 0.242878 0.995860 0.486782 0.601954 0.500455 
1 0.015091 0.173417 0.508923 0.152233 0.673011 
2 0.022210 0.842158 0.302539 0.408297 0.983856 
3 0.978881 0.760028 0.254995 0.610134 0.247800 
4 0.233714 0.401079 0.984682 0.354219 0.816966 

print(normal_row) 

0 0.778379 
1 0.019352 
2 0.583937 
3 0.227633 
4 0.646096 
dtype: float64 

因爲resultp.columns是字符串,這個乘法回來爲NaN小號

resultp.mul(normal_row, axis=1) 

    0 1 2 3 4 0 1 2 3 4 
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 

你需要轉換resultp.columnsint

resultp.columns = resultp.columns.astype(int) 

然後乘以

resultp.mul(normal_row, axis=1) 

      0   1   2   3   4 
0 0.305954 0.079327 0.351183 0.588635 0.209578 
1 0.136023 0.152232 0.443796 0.493444 0.678651 
2 0.411359 0.267142 0.202791 0.327760 0.307422 
3 0.399191 0.225889 0.130076 0.147862 0.038032 
4 0.039647 0.058929 0.358210 0.684927 0.180250 
+0

我需要將正常行索引與從1到919的列值對齊。此外,爲什麼在使用'.loc'方法時索引類型會更改? –

+0

@DanielJimenez我已更新我的帖子。希望這有助於 – piRSquared

+0

是的,它認爲這是問題。我想我仍然在學習熊貓的工作方式 –