python-3.x - 如果计数少于使用python的预期,我如何计算并将数字添加到特定位置?
问题描述
我把这个脚本放在一起,我修改了表格中的电话号码以删除 (,) 之类的字符,并在数字的开头添加了国家代码 55。
我的问题是表中有一些数字在(右括号)之后缺少特定数字(数字 9),例如:原始表的索引 1 只有 10 位,索引 0 和 2 有 11。
我需要将右括号后的成员 9 添加到只有 10 位数字的数字中。
有任何想法吗?
import pandas as pd
import numpy as np
import glob
import os.path
import win32com.client as win32
#get header 3 and select columns
#C:\Users\wilso\OneDrive\Desktop\PastaBoletosRelatoro
folder_path = r'C:\PastaBoletosRelatorioVencendoHoje'
file_type = '\*xlsx'
files = glob.glob(folder_path + file_type)
max_file = max(files, key=os.path.getctime)
import_file = pd.read_excel(max_file)
#display (max_file)
data = pd.read_excel(max_file, header=3, usecols=[0,6,7,8,9,10,11,12,13])
# empty variable
nan_value = float("NaN")
#
data.replace("", nan_value, inplace=True)
data.dropna(subset=["Nome"], inplace=True)
data.dropna(subset=["Placas"], inplace=True)
# reset data frame to index 0
data.reset_index(drop=True, inplace=True)
display(data)
# convert integer to string
dataNew = pd.DataFrame(data, columns=['Nome', 'Telefone Celular'])
dataNew['Nome'] = data['Nome'].str.split(" ").str[0].str.strip()
dataNew['Telefone Celular'] = data['Telefone Celular'].astype(str)
# add country code
dataNew['Telefone Celular'] = dataNew['Telefone Celular'].str.replace(r"\(", "55", regex=True)
# remove parentases
dataNew['Telefone Celular'] = dataNew['Telefone Celular'].str.replace(r"\)", "", regex=True)
# remove dashs from telephone number
dataNew['Telefone Celular'] = dataNew['Telefone Celular'].str.replace("-", "", regex=True)
display(dataNew)
结果就是这个原始数据
名称 | 电话蜂窝 |
---|---|
SOS 服务 | (33)98817-4441 |
莫西尔·德·耶稣 | (33)9927-4568 |
保罗·马科斯 | (31)98816-4441 |
目前的结果
名称 | 电话蜂窝 |
---|---|
求救 | 5533988174441 |
莫西尔 | 553399274568 |
保罗 | 5531988164441 |
预期结果 结果
名称 | 电话蜂窝 |
---|---|
求救 | 5533988174441 |
莫西尔 | 5533999274568 |
保罗 | 5531988164441 |
解决方案
你可以用rjust
. 这是一种用于用前导“值”填充列的方法,在您的情况下为 9。但首先您需要拆分电话号码并获取要填充的部分
telehpone_number_serie = dataNew['Telefone Celular'].str.split(')').str[1]
然后填充,直到所有单元格的长度 = 10,值 = 9
telehpone_number_serie.str.rjust(10, '9')
全部一起:
dataNew['Telefone Celular'].str.split(')').str[1].str.rjust(10, '9')
然后您可以在括号和 55 之间添加数字。
dataNew['FInal Telefone Celular'] = '55' + df.a.str.extract(r"\((\d+)\)")[0] + df.a.str.split(')').str[1].str.rjust(10, '9')
推荐阅读
- sql - 尝试在 case 语句中执行下一个多个选择查询时出现语法错误
- php - 我无法检查列中是否存在该值
- excel - 设置范围不适用于内部的 Cells()
- vue.js - 如何使用 vue-cli 3 配置环境变量?
- ios - 在 Swift 中使用按钮启动和停止动画
- vb.net - VB.NET - 图表不能绘制小于 1 的任何内容,例如:0、-1、-2
- xquery - 几行后 eXist-db HTML 输出“停止”
- c++ - 在 Windows (Mingw64) 上的执行速度比 Linux 慢 3 倍
- eclipse - Eclipse SVEditor 插件找不到路径
- asp.net - Crystal 报表与 Visual Studio 17 的集成