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.