Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python识别包含特定字符串的单元格并用数字覆盖内容_Python_Pandas_Replace_Substitution - Fatal编程技术网

使用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
哈哈。。。我只是想提一下——比我先说:)