python - 如何用一个函数替换字符串数据框中的多个字符
问题描述
我试图用“”替换字符串中的一些字符。我正在尝试使用 lambda 函数来丢弃我不需要的字符串中的字符。请帮我解决这个问题。
我的样本是:
import pandas as pd
df = pd.DataFrame({"Goods" :['Chicken eggs','Cowmilk)','Candy-go','Bread','Butter']})
print(df)
Goods
0 Chicken eggs
1 Cowmilk)
2 Candy-go
3 Bread
4 Butter
使用一个 lambda 替换器,它毫无疑问地工作。
def replacer():
df = pd.DataFrame({"Goods" :['Chicken eggs','Cowmilk)','Candy-go','Bread','Butter']})
replacer1 = lambda x: x.replace(" ", "")
df = df['Goods'].apply(replacer1)
return df
replacer()
0 Chickeneggs
1 Cow(milk)
2 Candy-go
3 Bread
4 Butter
Name: Goods, dtype: object
但是当我想用几个 lambda 替换器替换时,它给了我一个错误:
def replacer():
df = pd.DataFrame({"Goods" :['Chicken eggs','Cowmilk)','Candy-go','Bread','Butter']})
replacer1 = lambda x: x.replace(" ", "")
replacer2 = lambda x: x.replace(")", "")
replacer3 = lambda x: x.replace("-", "")
df = df['Goods'].apply(replacer1)
df = df['Goods'].apply(replacer2)
df = df['Goods'].apply(replacer3)
return df
replacer()
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-20-b64a731a1bae> in <module>
----> 1 replacer()
<ipython-input-19-d57b1f0a5d24> in replacer()
7
8 df = df['Goods'].apply(replacer2)
----> 9 df = df['Goods'].apply(replacer3)
10 df = df['Goods'].apply(replacer1)
11
~\anaconda3\lib\site-packages\pandas\core\series.py in __getitem__(self, key)
869 key = com.apply_if_callable(key, self)
870 try:
--> 871 result = self.index.get_value(self, key)
872
873 if not is_scalar(result):
~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_value(self, series, key)
4403 k = self._convert_scalar_indexer(k, kind="getitem")
4404 try:
-> 4405 return self._engine.get_value(s, k, tz=getattr(series.dtype, "tz", None))
4406 except KeyError as e1:
4407 if len(self) > 0 and (self.holds_integer() or self.is_boolean()):
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_value()
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_value()
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas\_libs\index_class_helper.pxi in pandas._libs.index.Int64Engine._check_type()
KeyError: 'Goods'
我想要得到的是:
Goods
0 Chickeneggs
1 Cowmilk
2 Candygo
3 Bread
4 Butter
解决方案
问题是这样的——
df = df['Goods'].apply(replacer1)
df['Goods'].apply(replacer1)
replacer 返回一个 pandas Series 并将其分配给df
下一次调用replacer2
它时尝试将其应用于一个 series 并且一个 series 没有 column Goods
。解决办法是——
df['Goods'] = df['Goods'].apply(replacer1)
推荐阅读
- jaxb - jaxb xml输出格式测试
- javascript - Silent YouTube Video Before It Plays
- javascript - 删除嵌套的 JavaScript 对象
- c++ - 我无法在 C++ 中运行 Gurobi(Clion、Mac OS)
- bash - BASH - 当 $@ 包含不存在的文件时如何使用 $@ 查找?
- r - r中的条件列拆分
- grails - 可以将 DomainObject 添加为 CommandObject 的属性吗?
- css - 将详细信息插入表单时,值未发送到表
- tsql - TSQL 从商品价格变化中获取商品价格历史记录
- python - Python 3 - 错误解码 ascii 符号(Python 2.7 运行良好)