簡體   English   中英

如果數字為1,則從熊貓列中刪除第一個字符

[英]Remove first character from pandas column if the number 1

以下代碼刪除了任何電話號碼列中的所有破折號。 如果電話號碼以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)

這是使用apply工具將具有非平凡邏輯的函數應用於列的示例:

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

另請參見apply概述

我會用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字符串訪問器。 但是,我們需要先分解為一系列。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM