python报错—为什么用apply方法使用.replace()方法报错TypeError: str.replace() takes no keyword arguments

项目场景:

1.要求: 将2021金额与2022金额的 ¥ 与 , 这两个符号替换为空。

导入数据及查看数据情况

import os
import pandas as pd 
import numpy as np
#读取文件
def read_file(filepath):
    os.chdir(os.path.dirname(filepath))
    return pd.read_csv(os.path.basename(filepath),encoding='utf-8')
file_pos="F:\\python_test\\data_1.csv"
data_pos=read_file(file_pos)
data_pos

问题描述:

2.1.实现过程一: 使用.replace()方法。

def convert_currency(value):
	'''
	转换字符串数字为float类型
	移除不是数字字符 ¥,
	转换为float类型
	'''
	new_value=value.replace({',':'','¥':''},regex=True)
	print(new_value)
	return new_value.astype('float')

实例调用函数,成功:

#2021金额、2022金额列完整的转换代码
data_pos['2021金额']=convert_currency(data_pos['2021金额'])

用apply调用函数,报错:

data_pos['2021金额'].apply(convert_currency)

python报错—为什么用apply方法使用.replace()方法报错TypeError: str.replace() takes no keyword arguments_第1张图片
3.1发现问题: 使用实例调用函数成功,使用apply调用函数报错。

2.2.实现过程二: 使用.str.replace()方法。

def convert_currency(value):
	'''
	转换字符串数字为float类型
	移除不是数字字符 ¥,
	转换为float类型
	'''
	new_value=value.str.replace('¥', '').str.replace(',', '')
	return new_value

实例调用函数,成功:

data_pos['2021金额']=convert_currency(data_pos['2021金额'])

用apply调用函数,报错:

data_pos['2021金额'].apply(convert_currency)

python报错—为什么用apply方法使用.replace()方法报错TypeError: str.replace() takes no keyword arguments_第2张图片

3.2发现问题: 使用实例调用函数成功,使用apply调用函数报错。


原因分析:

  • Series使用apply方法后,apply会自动遍历整个Series,将Series分解为一个个元素(元素数据类型跟数据列的数据类型一致)传入函数中。
    • 对于使用.replace()方法来进行正则替换,会默认为str.replace(old,new,count),并不存在regex这个参数,因此会报错:TypeError: str.replace() takes no keyword arguments

    • 对于使用.str.replace()方法来进行正则替换,.str.replace()只适用于Series对象,不用作用于类型,因此会报错AttributeError: ‘str’ object has no attribute ‘str’

对比使用apply调用函数与实例调用函数两种方法,分别传入的数据类型。

def data_type(value):
    '''
    用apply调用函数传入的数据类型
    '''
    print(value)
    print(type(value))
    print('______')
    return value

1、用apply调用函数,传入数据类型

data_pos['2021金额'].apply(data_type)

python报错—为什么用apply方法使用.replace()方法报错TypeError: str.replace() takes no keyword arguments_第3张图片

2、实例调用函数,传入数据类型

data_type(data_pos['2021金额'])

python报错—为什么用apply方法使用.replace()方法报错TypeError: str.replace() takes no keyword arguments_第4张图片
从上面可以看出,实例调用函数传入的数据类型是,apply方法调用函数传入的数据类型是,所以前者使用.replace()与.str.replace()方法都没有报错,后者就会出现前面两种报错提示。详细的.replace()与.str.replace()方法使用可以查看python替换—Series.replace()与Series.str.replace()的区别及为何replace()无效的解决方法


解决方案:实例调用函数。

你可能感兴趣的:(python报错,python,开发语言)