首页 > 解决方案 > 删除列名中不需要的字符串

问题描述

我有DataFrame以下类似:

 df

              (0,'a1')   (0,'a2') (0,'b1')  (0,'b2')  (0,'c1')     
 date                                                 
 2006-01-01   -0.00001   -0.00001  0.00001   0.00001  0.00001
 2006-01-02    0.00001    0.00001  0.00001  -0.00001  0.00001
 2006-01-03   -0.00001   -0.00001  0.00001   0.00001  0.00001
 2006-01-04    0.00001   -0.00001  0.00001   0.00001  0.00001
 2006-01-05    0.00001    0.00001  0.00001   0.00001  0.00001

我希望列名只是 a1、a2、b1、b2、c1 等,但不确定如何。

删除列名中其他内容的最佳方法是什么?

任何帮助都是极好的!!

标签: pythonstringpandas

解决方案


如果列名中的元组通过str使用可迭代对象来使用索引:

df.columns = df.columns.str[1]

如果字符串:

df.columns = df.columns.str.split(',').str[1].str.rstrip(')')    

或者Series.str.extract

df.columns = df.columns.str.extract(",'(.*)'\)", expand=False)
print (df)
                 a1       a2       b1       b2       c1
2006-01-01 -0.00001 -0.00001  0.00001  0.00001  0.00001
2006-01-02  0.00001  0.00001  0.00001 -0.00001  0.00001
2006-01-03 -0.00001 -0.00001  0.00001  0.00001  0.00001
2006-01-04  0.00001 -0.00001  0.00001  0.00001  0.00001
2006-01-05  0.00001  0.00001  0.00001  0.00001  0.00001

感谢@Jon Clements 提供另一个解决方案:

df.columns = df.columns.map(ast.literal_eval).get_level_values(1)

推荐阅读