使用Pandas:高效地对列名进行多个修改

4
你如何在避免样板代码的情况下对数据框列进行多次修改。
可重现的例子:
data = {'Subject Id': ['1', '2', '3'],
        'First-Name': ['Alex', 'Amy', 'Allen'], 
        'Last, name': ['Anderson', 'Ackerman', 'Ali']}

df = pd.DataFrame(data, columns = ['Subject Id', 'First-Name', 'Last, name'])

df

    Subject Id  First-Name  Last, name
0   1           Alex        Anderson
1   2           Amy         Ackerman
2   3           Allen       Ali

清理列名时,我通常会做这样的事情:

df.columns = [l.lower() for l in df.columns]
df.columns = [s.replace('-', ' ') for s in df.columns]
df.columns = [d.replace(',', ' ') for d in df.columns]

但有时我需要做超过3次修改。是否有一种方式可以将这些操作链接在一起或以更有效的方式完成?


1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Nickil Maveli
2个回答

5
你可以调用向量化的.str方法,并在列上链接这些调用,这里我们使用str.lowerstr.replace
In [91]:
df.columns = df.columns.str.lower().str.replace('-|,', ' ')
df

Out[91]:
  subject id first name last  name
0          1       Alex   Anderson
1          2        Amy   Ackerman
2          3      Allen        Ali

请注意,你完全可以将所有内容合并到一个列表推导式中:

同时请注意,这里没有任何阻止你这样做:

In [93]:
df.columns = [l.lower().replace('-', ' ').replace(',',' ') for l in df.columns]
df

Out[93]:
  subject id first name last  name
0          1       Alex   Anderson
1          2        Amy   Ackerman
2          3      Allen        Ali

一个列表推导式在这样少量列的情况下可能更快: 时间记录
In [96]:
%timeit [l.lower().replace('-', ' ').replace(',',' ') for l in df.columns]
%timeit df.columns.str.lower().str.replace('-|,', ' ')

100000 loops, best of 3: 5.26 µs per loop
1000 loops, best of 3: 284 µs per loop

3
df.columns = [l.lower().replace('-', ' ').replace(',', ' ') for l in df.columns]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接