我们处理志愿者的数据,使用ODK将数据输入表格。下载数据时,标题(列名称)行包含许多我们不需要的“东西”。模式如下:
'组别1 / most_common / G27'
我想替换列名(最多可以有200个)或创建一个DataFrame的副本,其列名只包含G代码(Gxxx)。我想我明白了。
更快或更好的方法是什么? 在排序顺序方面,输出是否可靠?截至目前,似乎结果列表与原始列表的顺序相同。
y = ['Group1/most common/G95', 'Group1/most common/G24', 'Group3/plastics/G132']
import re
r = []
for x in y:
m = re.findall(r'G\d+', x)
r.append(m)
# the comprehension below is to flatten it
# append.m gives me a list of lists (each list has one item)
results = [q for t in r for q in t]
print(results)
['G95', 'G24', 'G132']
想法是迭代DataFrame(或副本)中的列名,删除我不需要的内容并替换(inplace = True)。
感谢您的意见。
答案 0 :(得分:2)
您可以使用str.extract
:
df = pd.DataFrame(columns=['Group1/most common/G95',
'Group1/most common/G24',
'Group3/plastics/G132'])
print (df)
Empty DataFrame
Columns: [Group1/most common/G95, Group1/most common/G24, Group3/plastics/G132]
Index: []
df.columns = df.columns.str.extract('(G\d+)', expand=False)
print (df)
Empty DataFrame
Columns: [G95, G24, G132]
Index: []
使用rsplit
的另一个解决方案,并使用[-1]
选择最后一个值:
df.columns = df.columns.str.rsplit('/').str[-1]
print (df)
Empty DataFrame
Columns: [G95, G24, G132]
Index: []