TypeError:unorderable类型:int()> str():系列

时间:2017-06-24 10:48:23

标签: python-3.x pandas

从搜索中,似乎可以在一系列不同情况下得到此错误。这是我的:

testDf['pA'] = priorDf.loc[testDf['Period']]['a'] + testDf['TotalPlays']

--> 743     sorter = uniques.argsort()
    744 
    745     reverse_indexer = np.empty(len(sorter), dtype=np.int64)

TypeError: unorderable types: int() > str()

其中priorDf.loc[testDf['Period']]['a']是:

Period
2-17-1    1.120947
1-14-1    1.181726
7-19-1    1.935126
4-08-1    3.828184
3-14-1    0.668255

testDf['TotalPlays']是:

0     1
1     1
2     1
3     1
4     1

两者的长度均为48.

----附加信息-----

print (priorDf.dtypes)
mean    float64
var     float64
a       float64
b       float64
dtype: object

print (testDf.dtypes)
UserID          int64
Period         object
PlayCount       int64
TotalPlays      int64
TotalWks        int64
Prob          float64
pA              int64
dtype: object

-----更多信息---------

print (priorDf['a'].head()) 

Period
1-00-1    0.889164
1-01-1    2.304074
1-02-1    0.281502
1-03-1    1.137781
1-04-1    2.335650
Name: a, dtype: float64

print (testDf[['Period','TotalPlays']].head()) 

   Period  TotalPlays
0  2-17-1           1
1  1-14-1           1
2  7-19-1           1
3  4-08-1           1
4  3-14-1           1

我也尝试将priorDf.loc[testDf['Period']]['a']转换为int类型(因为它是一个浮点数),但仍然是同样的错误。

2 个答案:

答案 0 :(得分:0)

我认为您需要priorDf['a'] dictindexes创建它。

问题与DataFrames的{​​{1}}不同,因此数据无法对齐。

#changed data of Period for match sample data
print (testDf)
   Period  TotalPlays
0  1-00-1           1
1  1-14-1           1
2  7-19-1           1
3  4-08-1           1
4  1-04-1           1

testDf['pA'] = testDf['Period'].map(priorDf['a']) + testDf['TotalPlays']
print (testDf)
   Period  TotalPlays        pA
0  1-00-1           1  1.889164
1  1-14-1           1       NaN
2  7-19-1           1       NaN
3  4-08-1           1       NaN
4  1-04-1           1  3.335650
print (priorDf['a'].to_dict())
{'1-02-1': 0.28150199999999997, '1-01-1': 2.304074, 
'1-00-1': 0.88916399999999995, '1-03-1': 1.1377809999999999, 
'1-04-1': 2.3356499999999998}

testDf['pA'] = testDf['Period'].map(priorDf['a'].to_dict()) + testDf['TotalPlays']
print (testDf)
   Period  TotalPlays        pA
0  1-00-1           1  1.889164
1  1-14-1           1       NaN
2  7-19-1           1       NaN
3  4-08-1           1       NaN
4  1-04-1           1  3.335650

答案 1 :(得分:0)

因此,在使用随机生成的值S = pd.Series(np.random.randn(48))进行测试后,我的结论是,当将来自两个不同系列的列添加到一起时,它们必须具有相同的索引。熊猫必须自动在幕后或其他东西上对它们进行排序。所以在我的情况下,我将句点作为一个索引,将句点作为列,而不是另一个索引。

我重写的解决方案是:

testDf.set_index('Period', inplace=True)
testDf['pA'] = priorDf.loc[testDf.index]['a'] + testDf['TotalPlays']
testDf['pB'] = priorDf.loc[testDf.index]['b'] + testDf['TotalWks']-testDf['TotalPlays']

感谢jezrael帮助我深究它。