Skip to main content
 首页 » 编程设计

python之如何用 Pandas 旋转数据框

2025年05月04日9bjzhanghao

我正在尝试旋转这个 DataFrame 'a':

  algoasdaa      rc      rmse 
0       asa   20-50  0.585161 
1       asa  20-100  0.462159 
2       asa  40-100  2.664910 
3       asa  60-200  3.957400 
4       asa  60-300  3.799590 
5      lorl   20-50  0.696916 
6      lorl  20-100  0.456810 
7      lorl  40-100  2.489900 
8      lorl  60-200  4.004530 
9      lorl  60-300  3.736500 

通过调用数据透视法

a.pivot('rc', 'algoasdaa', 'rmse') 

但是我总是报错

KeyError: 'no item named rmse' 

即使这种情况看起来与 docs 中描述的完全一样

提前致谢!

请您参考如下方法:

那应该有用,而且对我有用:

>>> df.pivot("rc", "algoasdaa", "rmse") 
algoasdaa       asa      lorl 
rc                            
20-100     0.462159  0.456810 
20-50      0.585161  0.696916 
40-100     2.664910  2.489900 
60-200     3.957400  4.004530 
60-300     3.799590  3.736500 

我怀疑您的 rmse 列名称中有一些您看不到的空格。例如,如果我添加一个空格,它看起来是一样的:

>>> df.columns = ["rc", "algoasdaa", " rmse"] 
>>> df 
     rc algoasdaa      rmse 
0   asa     20-50  0.585161 
1   asa    20-100  0.462159 
2   asa    40-100  2.664910 
3   asa    60-200  3.957400 
4   asa    60-300  3.799590 
5  lorl     20-50  0.696916 
6  lorl    20-100  0.456810 
7  lorl    40-100  2.489900 
8  lorl    60-200  4.004530 
9  lorl    60-300  3.736500 

但是:

>>> df.pivot("rc", "algoasdaa", "rmse") 
Traceback (most recent call last): 
[...] 
KeyError: u'no item named rmse' 

尝试

>>> print df.columns 
Index([u'rc', u'algoasdaa', u' rmse'], dtype=object) 

确认这一点。然后你可以修复你的读取操作(最好)或者在事后用类似的东西修补它们

>>> df.columns = [col.strip() for col in df.columns] 

或

>>> df.columns = pd.Series(df.columns).str.strip()