gpt4 book ai didi

python - 将 lambda 函数应用于 pandas 数据框 - 返回索引但不返回值?

转载 作者:太空宇宙 更新时间:2023-11-04 08:29:17 25 4
gpt4 key购买 nike

我正在运行一个清理一些电话号码(英国)的过程,并决定使用正则表达式/替换在 Pandas DataFrame 上运行 lambda 函数以删除我不想包含的字符(非数字,允许一个 +)

代码如下:(phone_test只是一个测试样例的DataFrame,两列,一个索引和值)

def clean_phone_number(tel_no):
for row in test_data:
row = re.sub('[^?0-9+]+', '', row)
return(row)

phone_test_result = phone_test['TEL_NUMBER'].apply(lambda x: clean_phone_number(x))

我遇到的问题是结果 (phone_test_result) 只返回 phone_test 数据帧的索引,而不是新格式化的电话号码。我已经绞尽脑汁几个小时了,但我确信这是一个简单的问题。

起初我以为这只是返回线的定位(它应该在 for 下,对吗?)但是当我这样做时我只得到一个电话号码的输出,在循环的长度内重复(这甚至不在 phone_test 数据框中!)

请暂停。谢谢。


在回复之后,这就是我最终得到的:

使用正则表达式清理电话号码,只取前 13 个字符
- 用 +44 替换前导零
- 删除所有长度小于 13 个字符的内容。
它并不完美;
- 有一些电话号码的合法数字较少
- 意味着我删除了所有的分机号码

def clean_phone_number(tel_no):
clean_tel = re.sub('[^?0-9+]+', '', tel_no)[:13]
if clean_tel[:1] == '0':
clean_tel = '+44'+clean_tel[1:]
if len(clean_tel) < 13:
clean_tel = ''
return(clean_tel)

最佳答案

pd.Series.apply 将函数应用到系列中的每个。注意 lambda 是不必要的。

import re

phone_test = pd.DataFrame({'TEL_NUMBER': ['+44-020841396', '+44-07721-051-851']})

def clean_phone_number(tel_no):
return re.sub('[^?0-9+]+', '', tel_no)

phone_test_result = phone_test['TEL_NUMBER'].apply(clean_phone_number)

# 0 +44020841396
# 1 +4407721051851
# Name: TEL_NUMBER, dtype: object

pd.DataFrame.apply,相比之下,将函数应用于数据框中的每个:

def clean_phone_number(row):
return re.sub('[^?0-9+]+', '', row['TEL_NUMBER'])

phone_test_result = phone_test.apply(clean_phone_number, axis=1)

# 0 +44020841396
# 1 +4407721051851
# Name: TEL_NUMBER, dtype: object

关于python - 将 lambda 函数应用于 pandas 数据框 - 返回索引但不返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54245310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com