Czy ktoś wie, czy można pobrać numer tygodnia z daty w uint8 zamiast w int64 domyślnie?

Teraz ja robię:

df['sales_week'] = df['sales_date'].dt.week
df.astype({'sales_week': 'uint8'})

Ale prawdopodobnie nie jest to optymalne pod względem pamięci, prawda?

Czy można określić format, używając atrybutu .week?

1
shamalaia 19 listopad 2019, 13:34

1 odpowiedź

Możesz go od razu przekonwertować za pomocą metody astype.

import pandas as pd

df = pd.DataFrame({'sales_date': ['2019-11-15', '2019-11-16'], 'Z':['abc', 'def']})
df.sales_date = pd.to_datetime(df.sales_date)
df['sales_week'] = df.sales_date.dt.week.astype(pd.np.int8)

df.sales_week
# returns:
0    46
1    46
Name: sales_week, dtype: int8
0
James 19 listopad 2019, 13:40
1
OP zdaje sobie sprawę, że mogą używać astype, tak samo powiedzieli w pytaniu. Ich zmartwieniem jest marnowanie pamięci i mają rację: wywołanie astype oznacza, że ​​pandy najpierw generują kolumnę int64, która jest następnie natychmiast odrzucana. Stąd ich pytanie o bezpośrednie uzyskanie int8.
 – 
Andras Deak
19 listopad 2019, 13:56