python - 如何将数据框中的所有列传递到不同的用户定义函数
问题描述
如何将数据框中的所有列传递到不同的用户定义函数
这是我的数据框看起来像
data = [['tom', 10, 9876765143, 'SUN 1023'], ['nick', 15, 98767654312, 'SUN 1023'], ['juli', 14, 98769876541, 'SUN 1023']]
df = pd.DataFrame(data, columns = ['Name', 'Age', 'Number', 'Address'])
df
这是现在的功能,我只展示一个功能
def number(inp):
import re
regex = r'^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$'
inp = inp.replace(regex, 'XXXXXXX')
print (inp)
number(df.Number)
它抛出错误
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
同样,我有多个函数我只想将数据帧中的每一列与数据帧列中关联的值传递到每个用户定义的函数中,就像我有一个函数号一样,我还有其他函数 def new() def beg() 一个一个. 有没有办法解决这个问题
解决方案
为什么还要使用函数?您可以直接将正则表达式模式应用于相关列。
regex = r'^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$'
>>> df['Number'].astype(str).str.replace(regex, 'XXXXXXX')
0 XXXXXXX
1 XXXXXXX
2 XXXXXXX
Name: Number, dtype: object
如果你需要一个函数:
import random
def phone_number(series):
regex = r'^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$'
return series.str.replace(regex, 'X' * random.randrange(3, 8))
>>> phone_number(df['Number'].astype(str))
0 XXXXXXX
1 XXXXXXX
2 XXXXXXX
Name: Number, dtype: object
推荐阅读
- amazon-web-services - 存储满时 AWS 中的警报(Ec2)
- php - Symfony DotEnv PathException
- php - 将英镑(或美元)格式化为便士
- sql - Oracle SQL Developer 卡在“查找候选文件”上?
- postgresql - 将 QuickSight 连接到 Postrgres(启用 RLS)
- javascript - 三.js Transform控制缩放一个方向
- java - 如何在 pom.properties 文件中获取构建时间戳而不更改 pom.xml
- ios - 一种将用户引导至快捷应用的快捷方式(IOS App Flutter)
- java - GraphQL:无法匹配类型定义(TypeName{name='Long'})
- signalr - 部署的 Azure SignalR 函数失败:未设置 SignalR 服务连接字符串或终结点