Python 如果数字为1,则从列中删除第一个字符

Python 如果数字为1,则从列中删除第一个字符,python,pandas,Python,Pandas,下面的代码删除任何电话号码列中的任何破折号。如果电话号码以1开头,如何删除这些列中电话号码的第一个字符。我基本上希望所有的十位数都没有前导的1 import pandas as pd import numpy as np import re df = pd.read_csv('test2.csv') cols_to_check = ['Phone', 'phone', 'Phone.1'] df[cols_to_check] = df[cols_to_check].replace({'-'

下面的代码删除任何电话号码列中的任何破折号。如果电话号码以1开头,如何删除这些列中电话号码的第一个字符。我基本上希望所有的十位数都没有前导的1

import pandas as pd
import numpy as np
import re

df = pd.read_csv('test2.csv')

cols_to_check = ['Phone', 'phone', 'Phone.1']

df[cols_to_check] = df[cols_to_check].replace({'-':''}, regex=True)

df.to_csv('testnew.csv', mode = 'w', index=False)

这是使用该工具将具有非平凡逻辑的函数应用于列的示例:

for col in cols_to_check:
    df[col] = df[col].apply(lambda x : x[1:] if x.startswith("1") else x)

另请参见。

我将使用
applymap

选项1
使用
str.replace
'-'
替换为
'
。我假设我们总是可以取最后10位数

df[cols_to_check].applymap(lambda x: x.replace('-', '')[-10:])

    Phone       phone      Phone1
0  1234567890  1234567890  1234567890
1  1234567890  1234567890  1234567890
2  1234567890  1234567890  1234567890

选项2
使用
re.sub

但是,如果要去除所有非数字字符,请使用regex模块
re
,并执行与选项1类似的操作

import re

df[cols_to_check].applymap(lambda x: re.sub(r'\D', '', x)[-10:])

    Phone       phone      Phone1
0  1234567890  1234567890  1234567890
1  1234567890  1234567890  1234567890
2  1234567890  1234567890  1234567890

选项3
我们还可以使用
pd.Series.str
string访问器。但是,我们需要先把它分解成一个系列

df[cols_to_check].stack().str.replace('\D', '').str[-10:].unstack()

    Phone       phone      Phone1
0  1234567890  1234567890  1234567890
1  1234567890  1234567890  1234567890
2  1234567890  1234567890  1234567890

设置

df = pd.DataFrame(dict(
    Phone=['1-123-456-7890', '123-4567890', '11234567890'],
    phone=['1-123-456-7890', '123-4567890', '11234567890'],
    Phone1=['1-123-456-7890', '123-4567890', '11234567890'],
    Other=[1, 2, 3]
))

cols_to_check = ['Phone', 'phone', 'Phone1']

df

   Other           Phone          Phone1           phone
0      1  1-123-456-7890  1-123-456-7890  1-123-456-7890
1      2     123-4567890     123-4567890     123-4567890
2      3     11234567890     11234567890     11234567890