Replace values only in specified columns if ==0

pandas replace values in column based on condition
replace values in specific column pandas
pandas replace column values with another column
replace na with 0 in r column
pandas replace values in dataframe with values from another dataframe
pandas replace multiple values
replace na with 0 in r column dplyr
replace the priority column values with yes should be 1 and 'no should be 0

I have some data that looks like this:

  ID Married Age Visits
1  1       0  35      0
2  2       1   0      7
3  3       0  29     19
df <- data.frame(
          ID = c(1L, 2L, 3L),
     Married = c(0L, 1L, 0L),
         Age = c(35L, 0L, 29L),
      Visits = c(0L, 7L, 19L)
)

Imagine that for this data, Married is meant to be a dummy variable, but Age and Visits should definitely not be 0. I would like to know how to do two things:

  1. How can I replace, only in columns Age and Visits, replace NA for the 0 values?
  2. How can I replace, only in columns Age and Visits, replace -999 for the 0 values? This one is just for curiosity, because I'd like to know how to do it without using na_if().

This code isn't quite right, because it changes the Married column also.

df <- na_if(df, 0)

giving:

  ID Married Age Visits
1  1      NA  35     NA
2  2       1  NA      7
3  3      NA  29     19

whereas, what I would like is (1):

  ID Married Age Visits
1  1       0  35     NA
2  2       1  NA      7
3  3       0  29     19

and (2):

  ID Married Age Visits
1  1       0  35    -999
2  2       1  -999    7
3  3       0  29     19

I tried something like:

df <- na_if(c(df$Age, df$Visits), 0))

but that's not right.

Here's a dplyr solution to your problem.

library(tidyverse)
df %>% mutate_at(vars(Age,Visits),funs(na_if(.,0)))
df %>% mutate_at(vars(Age,Visits),funs(ifelse(. == 0,-999,.)))

pandas.DataFrame.replace — pandas 0.23.0 documentation, Values of the DataFrame are replaced with other values dynamically. For a DataFrame a dict can specify that different values should be replaced in different columns. Regular expressions will only substitute on strings, meaning you cannot� For a DataFrame a dict can specify that different values should be replaced in different columns. For example, {'a': 1, 'b': 'z'} looks for the value 1 in column ‘a’ and the value ‘z’ in column ‘b’ and replaces these values with whatever is specified in value. The value parameter should not be None in this case. You can treat this

You could do

Solution 1)

library(dplyr)
cols <- c("Age", "Visits")
df[cols] <- na_if(df[cols], 0)

df
#  ID Married Age Visits
#1  1       0  35     NA
#2  2       1  NA      7
#3  3       0  29     19

Solution 2)

df[cols][df[cols] == 0] <- -999

df
#  ID Married  Age Visits
#1  1       0   35   -999
#2  2       1 -999      7
#3  3       0   29     19

Similar to Solution 2) you could also do Solution 1) as

df[cols][df[cols] == 0] <- NA

UPDATE statement, Specifying DEFAULT for the update value sets the value of the column to the default literal is the only value which you can directly assign to a generated column. UPDATE EMPLOYEE SET JOB=NULL, SALARY=0, BONUS=0, COMM=0 getCursorName()); -- Change the job (JOB) of employee number ( EMPNO)� Find and Replace in a specified column in Excel 2007 Is there a simple way to do a 'Find and Replace' in only one column? I have a large spreadsheet where I'd like to replace numbers with specific text however I would like to confine it to one particular column.

You might want to try

df$Age[is.na(df$Age)] <- 0
df$Age[df$Age == -999] <- 0

R Replace NA with 0 (10 Examples for Data Frame, Vector & Column), A common way to treat missing values in R is to replace NA with 0. You will find a Choose one of these approaches according to your specific needs. What are However, we need to replace only a vector or a single column of our database. This option ensures that we are only to replace missing values and nothing else. Furthermore, we specify the MISSING=0 option to specify that these values are to be replaced with zeros. If we omit this option, missing values are replaced by the location measure by default. In the above example, we replace with zero for all numeric variables.

Pandas Tutorial: Replacing Values in , We also learned how to access and replace complete columns. Use at if you only need to get or set a single value in a DataFrame or Series. Series([0, 1, 2, 3, 4]) s.replace([0, 1, 2], 42, inplace=True) s �f replace is applied on a DataFrame, a dict can specify that different values df.loc[lambda df: df['shield'] == 8]. Options 2, 3, and 4 will replace filtered out data with zeros. It may be possible to show additional rows/columns in the view with the Analysis > Table Layout > Show Empty Rows/Columns option; However, no data can be written into these rows. If the crosstab only has one measure, then all NULL values can be replaced in the formatting options.

Extract or Replace Parts of a Data Frame, Numeric values are coerced to integer as if by as.integer . The default is to drop if only one column is left, but not to drop if only one row is left. value, A If columns specified by number are created, the names (if any) of the corresponding list elements are used to name the columns. [Package base version 2.5.0 Index] df.replace(np.nan,0) Let’s now review how to apply each of the 4 methods using simple examples. 4 cases to replace NaN values with zeros in pandas DataFrame Case 1: replace NaN values with zeros for a column using pandas. Suppose that you have a single column with the following data:

7 Modifying Values, You can replace multiple values at once as long as the number of new values equals the You can also remove columns from a data frame (and elements from a list) by 1 > 2 ## FALSE 1 > c(0, 1, 2) ## TRUE FALSE FALSE c(1, 2, 3) == c(3, 2, %in% is the only operator that does not do normal element-wise execution. -In the 'Replace Nulls' group check the box 'Replace with 0. FYI: this will only work for numeric fields Imputation:-In the 'Incoming value to replace' group select 'Null()'. In the 'Replace with Value' group select 'User specified Value' and set that to '0'

Comments
  • For some reason, I had it in my head that the funs() part of mutate_at had been deprecated to list(), but when I tried list() it didn't work. Your code worked perfectly. Can you explain the difference between funs() and list(), please?
  • That's not the case as far as I'm aware. The funs() argument specifies the functions that you want to apply to the variables in vars(). For details, see the dplyr documentation: dplyr.tidyverse.org/reference/scoped.html.