|
发表于 2024-4-1 18:36:53
|
显示全部楼层
你的代码中存在一些问题。首先,在 `__init__()` 方法中,你在定义实例属性时应该使用 `self.` 前缀,例如 `self.csv_path`、`self.file` 等。其次,在 `format_service()` 方法中,你需要使用 `re.findall()` 函数前加上 `re.` 前缀,指定使用正则表达式模块下的 `findall()` 函数。
此外,在 `format_file()` 方法中,你可以直接调用 `format_service()` 方法来处理每个字符串。不需要使用 `lambda` 表达式。
最后,在 `insert()` 方法中,你需要将 `df` 作为参数传递给 `InsertCsv` 类,并将其解包赋值给相应的实例属性。
下面是修改后的代码示例:
- import os
- import pandas as pd
- import re
- class InsertCsv:
- def __init__(self):
- self.csv_path = os.path.join(os.getcwd(), "csv")
- self.file = None
- self.min = None
- self.max = None
- self.sum = None
-
- def format_service(self, s):
- if '箱' in s:
- return '箱{}号'.format(re.findall(r'\d+', s)[0])
- else:
- return s
-
- def format_file(self):
- self.file = self.file.apply(self.format_service)
- print(self.file)
-
- def insert(self, df):
- self.file, self.min, self.max, self.sum = df
- self.format_file()
- # 以下是测试示例
- df = pd.DataFrame({'服务项目': ['11箱', '212号箱', '336号车箱', '箱26', '78号车', '76车']})
- data = df, 0, 0, 0
- ins = InsertCsv()
- ins.insert(data)
复制代码
在这个示例中,我们修正了类中的问题,并添加了一个测试示例。该示例创建了一个数据框 `df`,然后将其作为参数传递给 `InsertCsv` 类的 `insert()` 方法,最终输出了处理后的数据框。
希望这个修改后的代码能够满足你的需求。如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|