使用Python识别包含特定字符串的单元格并用数字覆盖内容
我有一个数据框,看起来像这样: 我的目标是确定每列的每个单元格是否包含以下字符串:使用Python识别包含特定字符串的单元格并用数字覆盖内容,python,pandas,replace,substitution,Python,Pandas,Replace,Substitution,我有一个数据框,看起来像这样: 我的目标是确定每列的每个单元格是否包含以下字符串:'KSS','ABC','DEF','ABC/DEF','KSS/DEF' 随后,我想用以下值替换内容:'KSS'->100、'ABC'->200、'DEF'->300、'ABC/DEF'->400、'KSS/DEF'->500 输出应如下所示: 注意:算法应该是通用的,并且检查每一列,而不仅仅是数字3。为完整起见,数据类型都是对象 到目前为止,我的代码是这些,但我想他们是不完整的 import pandas
'KSS'
,'ABC'
,'DEF'
,'ABC/DEF'
,'KSS/DEF'
随后,我想用以下值替换内容:'KSS'
->100、'ABC'
->200、'DEF'
->300、'ABC/DEF'
->400、'KSS/DEF'
->500
输出应如下所示:
注意:算法应该是通用的,并且检查每一列,而不仅仅是数字3。为完整起见,数据类型都是对象
到目前为止,我的代码是这些,但我想他们是不完整的
import pandas as pd
import numpy as np
df = pd.DataFrame([
['XYZ', 'BALSO', 'PISCO', 'KSS', 'Yes', 660, 'Cop'],
['XYZ', 'TONTO', 'LOLLO', '195', 500, 'Yes', 'nan'],
['XYZ', 'CALLO', 'WANDA', 'ABC / DEF', 'Yes', 500, 'nan'],
['XYZ', 'AZUNGO', 'FINGI', 'KSS / DEF', 'Yes', 500, 'nan']
])
df = pd.read_csv('prova.csv', sep=',', skiprows=0, header=None, low_memory=False)
df.str.replace('KSS|ABC|DEF','?')
如果使用查找值和替换值创建dict,则可以调用此列,此外,您需要将
na_action='ignore'
传递到map
,否则您会得到一个KeyError
以查找缺少的值,此外,您将注意到,由于缺少值,这些值将转换为float
,但您可以稍后使用astype(int)
再次强制转换:
In [182]:
d={'KSS':100, 'ABC' :200, 'DEF' : 300, 'ABC / DEF' : 400, 'KSS / DEF' : 500}
df[3] = df[3].map(d, na_action='ignore')
df
Out[182]:
0 1 2 3 4 5
0 XYZ BALSO PISCO 100.00 660 Cop
1 XYZ TONTO LOLLO nan 500 nan
2 XYZ CALLO WANDA 400.00 500 nan
3 XYZ AZUNGO FINGI 500.00 500 nan
在这里,我们使用astype
强制转换类型:
In [178]:
df[3] = df[3].astype(int)
df
Out[178]:
0 1 2 3 4 5
0 XYZ BALSO PISCO 100 660 Cop
1 XYZ TONTO LOLLO 195 500 nan
2 XYZ CALLO WANDA 400 500 nan
3 XYZ AZUNGO FINGI 500 500 nan
在这里,我们再次进行无意义的向下投票…因为没有代码可写。。。我从.csv文件加载所有内容!这个问题对每个人来说都很清楚,图片有助于让人理解。。。如果你不喜欢,没关系,这不是我的问题,但我看到一些好人更关心这个问题,而不是抱怨两张图片…我想ayhan说的是你没有发布原始数据来重现你的df,如果您发布了数据的文本,我们可以从剪贴板加载这些文本并帮助您,但是通过发布图像,您立即为社区设置了一个障碍来帮助您。你应该考虑我们的观点,如果你看到这个问题,你会怎么想复制它?无论如何,如果您使用查找值定义dict或series,那么您只需执行
df['3'].map(您的dict)
,但您需要筛选出不匹配的行,您只需使用.isin(d)
而不是调用它的.keys()
method there…@JonClements实际上这是不必要的,因为map
需要na_action
param,所以如果你传递na_action='ignore'
,那么它就不会停止并引发KeyError
哈哈。。。我只是想提一下——比我先说:)