【问题标题】:How to replace values in only some columns in Python without it affecting the same values in other columns?如何仅替换 Python 中某些列中的值而不影响其他列中的相同值?
【发布时间】:2021-10-20 07:40:48
【问题描述】:
  • 我有一个包含不同列的 Pandas 数据框。
    • 有些列只是“是”或“否”的答案,我需要用 1 和 0 替换
    • 有些列是 1 和 2,其中 2 等于否 - 这 2 需要替换为 0
    • 其他列是数字类别,例如 1、2、3、4、5,其中 1 = 狮子 2 = 狗
    • 其他列是字符串类别,例如:“A lot”、“A little”等
  • 前 2 列是目标变量

我的问题问题:

  1. 如果我只是将数据框中的所有 2 更改为 0,它最终会更改目标变量中的 2(在这种情况下,它充当分数而不是“否”)
  2. 另一个问题是类别为数字的列也会将其 2 更改为 0

我怎样才能清理这个数据框,以便 2.所有带有yes或1的列以及那些带有no或2的列->变成1和0 3. 两个目标变量 -> 保持 1-5 的分数 4. 在我对它们进行 onehot 编码之前,所有分类变量都保持不变。

这些是我采取的步骤:

  1. 将所有“是”或“否”更改为 0 和 1 df.replace(('Yes', 'No'), (1, 0), inplace=True)
  2. 现在为了用 0 替换所有充当“否”的 2 -
    1. 不影响前两个目标列中作为分数的“2”
    2. 也不是在具有 2 个以上唯一值的列中充当类别值的“2”,我想我需要结合以下两行代码,对吗?我正在尝试不同的方法来组合它们,但我不断收到错误

df.loc[:, df.nunique()

【问题讨论】:

  • 只需使用df[column_name].replace(...) 即可仅使用选定的列

标签: python pandas dataframe numeric categorical-data


【解决方案1】:

如果您在此处显示您的代码和数据库示例会更好。我有点困惑。这是我收集到的:

首先,这是我创建的一个虚拟数据集:

这是我认为可以解决您的两个问题的代码。如果有什么遗漏,那是因为我没有完全理解我所说的。

import pandas as pd
import numpy as np
import os

filename = os.path.join(os.path.dirname(__file__),'data.csv')
sample = pd.read_csv(filename)

# This solves your first problem. Here we create a new column using numeric values instead of yes/no string values
#with a function
def create_answers_column(sample, colname):
    def is_yes(a):
        if a == 'yes':
            return 1
        else:
            return 0
    return sample[colname].apply(is_yes)
sample['Answers Numeric'] = create_answers_column(sample, 'Answers')


#This solves your second problem
#Using replace()
sample['Numbers'] = sample.Numbers.replace({2:0})

print(sample)

这是输出:

Answers  Numbers  Animals Quantifiers  Answers Numeric
0     yes        1        1       a lot                1
1     yes        0        2      little                1
2      no        0        3        many                0
3     yes        1        4        some                1
4      no        1        5     several                0

【讨论】:

    猜你喜欢
    • 2020-01-04
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 2022-09-27
    • 2023-03-03
    • 2021-07-04
    相关资源
    最近更新 更多