Extrahovat data a třídit je podle data

0

Otázka

Snažím se přijít na cvičení na řetězec manipulace a třídění. Výkon žádá, aby extrahovat slova, která mají referenční čas (např. hodiny, dny) z textu a seřadit řádky na základě času, extrahované v ascendent pořadí. Příklad dat je:

Customer     Text
1            12 hours ago — the customer applied for a discount
2            6 hours ago — the customer contacted the customer service
3            1 day ago — the customer reported an issue
4            1 day ago — no answer
4            2 days ago — Open issue
5            

V tomto úkolu jsem identifikovala několik problémů:

- time reference can be expressed as hours/days/weeks
- there are null values or no reference to time
- get a time format suitable and more general, e.g., based on the current datetime

Na první bod jsem uvedl, že obecně data jsou před —, zda je přítomen, takže to může být snadno extrahovat. Na druhý bod, jestliže prohlášení by zabránilo chybové zprávy důsledku neúplné/chybějící pole. Já nevím, jak odpovědět na třetí bod, ačkoli.

Můj očekávaný výsledek by byl:

Customer     Text                                                        Sort by
1            12 hours ago — the customer applied for a discount             1
2            6 hours ago — the customer contacted the customer service      2
3            1 day ago — the customer reported an issue                     2
4            1 day ago — no answer                                          2
4            2 days ago — Open issue                                        3
5            
data-manipulation pandas python
2021-11-24 01:46:37
1

Nejlepší odpověď

1

Vzhledem k tomu Datovém vzorku, budu předpokládat, že pro toto cvičení první dvě slova z textu jsou to, co jste po. Jsem nejasný o tom, jak třídění funguje, ale pro třetí bod, vhodnější by byly current time - timedelta z zněním sloupec

Můžete použít if-else funkce lambda pro první dvě slova každého řádku Text a převést to do pandy Timedelta objektu - např. pd.Timedelta("1 day") vrátí Timedelta objektu.

Pak můžete odečíst Timedelta sloupců od aktuálního času, které můžete získat s pd.Timestamp.now():

df["Timedelta"] = df.Text.apply(lambda x: pd.Timedelta(' '.join(x.split(" ")[:2])) if pd.notnull(x) else x)
df["Time"] = pd.Timestamp.now() - df["Timedelta"]

Výstup:

>>> df
   Customer                                               Text       Timedelta                       Time
0         1  12 hours ago — the customer applied for a disc... 0 days 12:00:00 2021-11-23 09:22:40.691768
1         2  6 hours ago — the customer contacted the custo... 0 days 06:00:00 2021-11-23 15:22:40.691768
2         3         1 day ago — the customer reported an issue 1 days 00:00:00 2021-11-22 21:22:40.691768
3         4                              1 day ago — no answer 1 days 00:00:00 2021-11-22 21:22:40.691768
4         4                            2 days ago — Open issue 2 days 00:00:00 2021-11-21 21:22:40.691768
5         5                                                NaN             NaT                        NaT
2021-11-24 18:34:53

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................