替换与数据框中特定字符串匹配的值

Posted

技术标签:

【中文标题】替换与数据框中特定字符串匹配的值【英文标题】:Replacing values that match certain string in dataframe 【发布时间】:2019-06-21 03:27:04 【问题描述】:

我正在尝试替换数据框中的某些数据以包含额外的“F”。

代码应如下所示:

if testdata['pfType'] =='NK225M'|testdata['pfType'] == 'TOPIXM':
    testdata['pfType'] = ' testdata['pfType'] & 'F';

我尝试过这样做:

testdata['pfType'][testdata['pfType'] == 'NK225M'] = 'NK225MF'
testdata['pfType'][testdata['pfType'] == 'TOPIXM'] = 'TOPIXMF'

但它并没有改变值,如果是 NK225M 或 TOPIXM,将“F”添加到字符串的最佳方法是什么。

【问题讨论】:

【参考方案1】:

使用isin作为列表的测试值,如果匹配条件添加F

testdata = pd.DataFrame('pfType':['NK225M','TOPIXM','AAA'])

vals = ['NK225M','TOPIXM']
testdata.loc[testdata['pfType'].isin(vals), 'pfType'] += 'F'
print (testdata)
    pfType
0  NK225MF
1  TOPIXMF
2      AAA

Series.masknumpy.where 的另一种解决方案:

testdata['pfType'] = testdata['pfType'].mask(testdata['pfType'].isin(vals),
                                             testdata['pfType'] + 'F')

testdata['pfType'] = np.where(testdata['pfType'].isin(vals), 
                              testdata['pfType'] + 'F', 
                              testdata['pfType'])

【讨论】:

【参考方案2】:

使用numpy.where

例如:

import pandas as pd
import numpy as np

testdata = pd.DataFrame("pfType": ['NK225M', 'TOPIXM', "Hello", "World"])
testdata['pfType'] = np.where((testdata['pfType'] == "TOPIXM") | (testdata['pfType'] == 'NK225M'), testdata['pfType']+"F", testdata['pfType'])
print(testdata)

输出:

    pfType
0  NK225MF
1  TOPIXMF
2    Hello
3    World

【讨论】:

【参考方案3】:

使用np.where

testdata['pfType'] = np.where(testdata['pfType']=='NK225M', 'NK225MF', testdata['pfType'])
testdata['pfType'] = np.where(testdata['pfType']=='TOPIXM', 'TOPIXMF', testdata['pfType'])

【讨论】:

【参考方案4】:

要修改数据框,请使用以下代码。

  testdata.at['pfType', testdata['pfType'] == 'NK225M'] = 'NK225MF'

(ref.)

【讨论】:

以上是关于替换与数据框中特定字符串匹配的值的主要内容,如果未能解决你的问题,请参考以下文章

遍历数据框和字典以更新数据框中的值,以便与 python 匹配字符串

使用部分字符串匹配将数据框中的列替换为另一个数据框列

在字符串中查找与字典中的值匹配的单词,然后在新列中返回键

我该如何处理这种情况:“n/a”在 pandas 数据框中显示为“nan”,但无法对其进行字符串匹配和替换

Java Regex替换与特定文本匹配的行[重复]

如果匹配 FLUTTER 中的特定字符,则替换字符串中的字符