我的列名如下:
1:Arnston 2:Berg 3:Carlson 53:Brown
我希望在:
之前删除所有字符。我知道我可以重命名这些列,但由于我的数字达到100,这将非常繁琐。
我想要的出局是:
Arnston Berg Carlson Brown
答案 0 :(得分:3)
假设你的框架看起来像这样:
>>> df
1:Arnston 2:Berg 3:Carlson 53:Brown
0 5 0 2 1
1 9 3 2 9
2 9 2 9 7
您可以使用向量化字符串运算符在第一个冒号处拆分每个条目,然后使用第二个部分:
>>> df.columns = df.columns.str.split(":", 1).str[1]
>>> df
Arnston Berg Carlson Brown
0 5 0 2 1
1 9 3 2 9
2 9 2 9 7
答案 1 :(得分:0)
你可以用列表理解来做到这一点:
columns = '1:Arnston 2:Berg 3:Carlson 53:Brown'.split()
print('Before: {!r}'.format(columns))
columns = [col.split(':')[1] for col in columns]
print('After: {!r}'.format(columns))
<强>输出强>
Before: ['1:Arnston', '2:Berg', '3:Carlson', '53:Brown'] After: ['Arnston', 'Berg', 'Carlson', 'Brown']
另一种方法是使用re.sub()
的正则表达式:
import re
columns = '1:Arnston 2:Berg 3:Carlson 53:Brown'.split()
pattern = re.compile(r'^.+:')
columns = [pattern.sub('', col) for col in columns]
print(columns)
<强>输出强>
['Arnston', 'Berg', 'Carlson', 'Brown']
答案 2 :(得分:0)
import re
s = '1:Arnston 2:Berg 3:Carlson 53:Brown'
s_minus_numbers = re.sub(r'\d+:', '', s)
得到你
'Arnston Berg Carlson Brown'
答案 3 :(得分:0)
最好的解决方案IMO是使用熊猫&#39;列上的LoginManager.getInstance().loginWithReadPermissions();
LoginManager.getInstance().loginWithPublishPermissions();
属性。这允许使用正则表达式而无需导入str
:
re
正则表达式的含义:在一个或多个数字(df.columns.str.extract(r'\d+:(.*)')
)和冒号((.*)
)之后选择所有内容(\d+
)。
答案 4 :(得分:0)
df = pd.DataFrame({'1:Arnston':[5,9,9],
'2:Berg':[0,3,2],
'3:Carlson':[2,2,9] ,
'53:Brown':[1,9,7]})
[x.split(':')[1] for x in df.columns.factorize()[1]]
输出:
['Arnston', 'Berg', 'Carlson', 'Brown']
答案 5 :(得分:0)
您可以使用str.replace
并传递正则表达式:
In [52]: df
Out[52]:
1:Arnston 2:Berg 3:Carlson 53:Brown
0 1.340711 1.261500 -0.512704 -0.064384
1 0.462526 -0.358382 0.168122 -0.660446
2 -0.089622 0.656828 -0.838688 -0.046186
3 1.041807 0.775830 -0.436045 0.162221
4 -0.422146 0.775747 0.106112 -0.044917
In [51]: df.columns.str.replace('\d+[:]','')
Out[51]: Index(['Arnston', 'Berg', 'Carlson', 'Brown'], dtype='object')