Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Looing negative sign when extracting data from a dataframe

I extract temperature from a website into a dataframe. It looks like this:

           Temp      Prec
0     3 / -4 °C         -
1    1 / -17 °C         -
2   -7 / -18 °C         -
3     6 / -8 °C         -
4      8 / 1 °C         -
5      8 / 0 °C   1.3  mm
6      8 / 0 °C   7.0  mm
7     6 / -1 °C         -
8      4 / 0 °C   4.0  mm
9      5 / 2 °C  23.8  mm
10     6 / 1 °C         -
11    5 / -1 °C         -
12    4 / -1 °C         -
13     7 / 0 °C  10.6  mm
14     7 / 1 °C  29.7  mm

Then I use this code to extract the temperature in the format I want:

df2['Temp'] = df2['Temp'].str.extract('(\d+)') + 'C'

and I get this result:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

   Temp      Prec
0    3C         -
1    1C         -
2    7C         -
3    6C         -
4    8C         -
5    8C   1.3  mm
6    8C   7.0  mm
7    6C         -
8    4C   4.0  mm
9    5C  23.8  mm
10   6C         -
11   5C         -
12   4C         -
13   7C  10.6  mm
14   7C  29.7  mm

I have lost the negative sign (like on row 2) when it’s a temperature below zero. How can I keep the negative sign?

>Solution :

Without regex, go for rsplit and slice with str :

df["Temp"] = df["Temp"].str.rsplit("/", n=1).str[-1]

And regarding the regex approach, you can include °C in the captured group :

df["Temp"] = df["Temp"].str.extract("(-?\d+\s*°C)", expand=False)


Output :

print(df)

      Temp     Prec
0    -4 °C        -
1   -17 °C        -
2   -18 °C        -
3    -8 °C        -
4     1 °C        -
5     0 °C   1.3 mm
6     0 °C   7.0 mm
8     0 °C   4.0 mm
9     2 °C  23.8 mm
10    1 °C        -
11   -1 °C        -
12   -1 °C        -
13    0 °C  10.6 mm
14    1 °C  29.7 mm
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading