如何对dataframe列进行大量修改,避免使用样板代码。
可重复的例子:
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次以上的修改。有没有办法将这些操作联系在一起,或者更有效地做到这一点?
答案 0 :(得分:5)
您可以调用向量化.str
方法并在列上对这些调用进行链接,在这里我们使用str.lower
和str.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
答案 1 :(得分:3)
df.columns = [l.lower().replace('-', ' ').replace(',', ' ') for l in df.columns]