Próbuję wyczyścić dane z pliku. Wykonałem częściowe czyste, a dane wyglądały tak.

enter image description here

Kolumna Price nadal musi być czyszczona i zaktualizowana w inne kolumny. To jest to, co chcę zrobić

Str '80 per piece' =>

80 -> 'Price' column
'piece' -> 'Unit' column

Str '110 per pack' =>
110 -> 'Price' column
'pack' -> 'Unit' column

Stworzyłem maskę, aby odzyskać rzędy, których potrzebuję, a następnie używał Regex do wyodrębniania nie-cyfr. Uważam, że dotyka wszystkich wierszy. Kiedy próbuję użyć tylko rzędów pobranych przez maskę - otrzymuję błąd.

, jak zapewnić tylko kolumnę w warunkowo pobranych wierszach?

To jest mój kod - nieprawidłowe wyjście bez użycia maski po obu stronach.

enter image description here

Ale jeśli spróbuję tego za pomocą maski - dostaję ten błąd

enter image description here

0
Vidya 10 październik 2020, 15:55

1 odpowiedź

Najlepsza odpowiedź

IIUC możesz extract z nazwanymi grupami, a następnie {x1}}:

df = pd.DataFrame({"Unit":["gm", np.NaN, np.NaN],
                   "Price":["40","80 per piece", "110 per pack"]})

  Unit         Price
0   gm            40
1  NaN  80 per piece
2  NaN  110 per pack

s = df.loc[df["Unit"].isnull(),"Price"].str.extract("(?P<Price>\d+)\sper\s(?P<Unit>[A-Za-z]+)").dropna()

df.update(s)

print (df)

    Unit Price
0     gm    40
1  piece    80
2   pack   110
1
Henry Yik 10 październik 2020, 13:44