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

Posted

技术标签:

【中文标题】从 Python 数据框的一列中的每一行中删除前 x 个字符【英文标题】:Remove first x number of characters from each row in a column of a Python dataframe 【发布时间】:2017-07-10 00:40:25 【问题描述】:

我有一个包含大约 1,500 行和 15 列的 Python 数据框。对于一个特定的列,我想删除每行的前 3 个字符。作为一个简单的例子,这里是一个数据框:

import pandas as pd

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

d = pd.DataFrame(d)

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

【问题讨论】:

【参考方案1】:

使用矢量化的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

【讨论】:

【参考方案2】:

值得注意的是,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 解决方案。

【讨论】:

以上是关于从 Python 数据框的一列中的每一行中删除前 x 个字符的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 PySpark 数据框的另一列中的值修改列? F.当边缘情况

pyspark:在数据框的每一列中获取唯一项目

如何在数据框的其他列中的一列中搜索字符串

如何在熊猫数据框的每一行中找到选定列中的两个最低值?

如何为熊猫数据框的每一列应用具有不同时间常数的一阶过滤器?

从熊猫字典列表中提取元素