简体   繁体   中英

How to replace only numeric values in Data frame column with value from other column

My first question. I can not find a solution how to replace only values that are numeric ind Pandas df.

I have a data frame like below:

index   sposob-produkcji    rok-produkcji
0   FABRYCZNY   FABRYCZNY
1   FABRYCZNY   2010
2   FABRYCZNY   2010
3   FABRYCZNY   2009
4   FABRYCZNY   2009
... ... ...
41139   2022        FABRYCZNY
41140   2020        FABRYCZNY
41141   2019        FABRYCZNY
41142   2016        FABRYCZNY
41143   1975        FABRYCZNY

I want to replace all (and only) numeric values in col1 with value from col2.

I did it one by one as below and it works.

cars['sposob-produkcji'] = np.where(cars['sposob-produkcji']  ==  2022, cars['rok-produkcji'] , cars['sposob-produkcji']  )

But can't find "general" formula. Those one don't work:

cars['sposob-produkcji'] = np.where(cars['sposob-produkcji'].str.isnumeric()  ==  True, cars['rok-produkcji'] , cars['sposob-produkcji']  )

cars['sposob-produkcji'] = np.where(cars['sposob-produkcji'].str.isdigit()  ==  True, cars['rok-produkcji'] , cars['sposob-produkcji']  )

I think that problem is with data type. Those values seems to be numeric...?

Any hints? Thans, Tomek

here are two way to do that

stripping away the blanks and then checking if its a digit

df['sposob-produkcji'] = np.where(df['sposob-produkcji'].str.strip().str.isdigit(), df['rok-produkcji'], df['sposob-produkcji'] )
df

OR

using match as @jch suggested and assigning back to the sposob-produkcji

df['sposob-produkcji'] = np.where(df['sposob-produkcji'].str.match(r'\d+'), df['rok-produkcji'], df['sposob-produkcji'] )
df
    index   sposob-produkcji    rok-produkcji
0   0       FABRYCZNY   FABRYCZNY
1   1       FABRYCZNY   2010
2   2       FABRYCZNY   2010
3   3       FABRYCZNY   2009
4   4       FABRYCZNY   2009
5   41139   FABRYCZNY   FABRYCZNY
6   41140   FABRYCZNY   FABRYCZNY
7   41141   FABRYCZNY   FABRYCZNY
8   41142   FABRYCZNY   FABRYCZNY
9   41143   FABRYCZNY   FABRYCZNY

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM