Наиболее эффективный способ перебора и обновления строк в большом фрейме данных pandas
Это мой фрагмент кода для обновления строк фрейма данных:
def arrangeData(df):
hour_from_timestamp_list = []
date_from_timestamp_list = []
for row in df.itertuples():
timestamp = row.timestamp
hour_from_timestamp = datetime.fromtimestamp(
int(timestamp) / 1000).strftime('%H:%M:%S')
date_from_timestamp = datetime.fromtimestamp(
int(timestamp) / 1000).strftime('%d-%m-%Y')
hour_from_timestamp_list.append(hour_from_timestamp)
date_from_timestamp_list.append(date_from_timestamp)
df['Time'] = hour_from_timestamp_list
df['Hour'] = pd.to_datetime(df['Time']).dt.hour
df['ChatDate'] = date_from_timestamp_list
return df
Я пытаюсь извлечь время, час и чат из метки времени. Код работает нормально. Но когда есть огромный набор данных, где-то около 300 000 строк, функция работает крайне медленно. Может ли кто-нибудь предложить лучший способ выполнить эту функцию быстрее?
Для зацикливания я попробовал iterrows (), который был еще медленнее.
Это документ, который я обрабатываю:
{
"_id" : ObjectId("5b9feadc32214d2b504ea6e1"),
"id" : 34176,
"timestamp" : NumberLong(1535019434998),
"platform" : "Email",
"sessionId" : LUUID("08a5caac-baa3-11e8-a508-106530216ef0"),
"intentStatus" : "NotHandled",
"botId" : "tony"
}
1 ответ:
Я считаю, что здесь возможно использование:
#thanks @Chris A for another solution t = pd.to_datetime(df['timestamp'], unit='ms') t = pd.to_datetime(df['timestamp'].astype(int) / 1000) #alternative #t = pd.to_datetime(df['timestamp'].apply(int) / 1000) #t = pd.to_datetime([int(x) / 1000 for x in df['timestamp']] ) df['Time'] = t.dt.strftime('%H:%M:%S') df['Hour'] = t.dt.hour df['ChatDate'] = t.dt.strftime('%d-%m-%Y')
Comments