我有一个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等,但不确定如何。
删除列名中其他内容的最佳方法是什么?
任何帮助都会很棒!
答案 0 :(得分:3)
如果列名中的元组通过str
与可迭代对象一起使用索引:
df.columns = df.columns.str[1]
如果是字符串:
df.columns = df.columns.str.split(',').str[1].str.rstrip(')')
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)
答案 1 :(得分:1)
或使用rename
:
df = df.rename(columns=lambda x: x.split(',')[1][1:-2])
如果它们是元组:
df = df.rename(columns=lambda x: x[1])
现在:
print(df)
将符合预期。
答案 2 :(得分:0)
还
df.columns = list(map(lambda x: x.split(',')[1].lstrip("'").rstrip("')"), [x for x in list(df)]))