从Python数据框架的一个列中删除每行的前x个字符

62

我有一个包含大约1,500行和15列的Pandas数据框。对于其中一个特定的列,我想要删除每一行的前三个字符。这里是一个简单的示例数据框:

import pandas as pd

d = {
    'Report Number':['8761234567', '8679876543','8994434555'],
    'Name'         :['George', 'Bill', 'Sally']
     }

d = pd.DataFrame(d)

我想从数据框 dReport Number 列中每个字段中删除前三个字符。

3个回答

100

使用向量化的str方法来切分每个字符串条目

In [11]:
d['Report Number'] = d['Report Number'].str[3:]
d

Out[11]:
     Name Report Number
0  George       1234567
1    Bill       9876543
2   Sally       4434555

7
值得注意的是,Pandas的“向量化”str方法不过是Python级别的循环。假设数据干净,您通常会发现列表推导更有效:
# Python 3.6.0, Pandas 0.19.2

d = pd.concat([d]*10000, ignore_index=True)

%timeit d['Report Number'].str[3:]           # 12.1 ms per loop
%timeit [i[3:] for i in d['Report Number']]  # 5.78 ms per loop

请注意,这两者并不等价,因为列表推导式无法处理空数据和其他边缘情况。对于这些情况,您可能更喜欢使用Pandas解决方案。


2

你也可以调用 str.slice。要从每个字符串中删除前3个字符:

df['Report Number'] = df['Report Number'].str.slice(3)

从每个字符串中切片前2-4个字符:

df['Report Number'] = df['Report Number'].str.slice(1, 4)

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