#python #pandas #dataframe #date
Вопрос:
Я новичок в Python/пандах. У меня есть фрейм данных, который выглядит следующим образом
x = pd.DataFrame([20210901,20210902, 20210903, 20210904])
[выход]:
0 0 20210901 1 20210902 2 20210903 3 20210904
Я хочу разделить каждую строку следующим образом: например
year = 2021 month = 9 day = 1
или у меня есть список для каждой строки, как это:
[2021,9,1]
Комментарии:
1. какой результат вы ищете? пожалуйста, добавьте то, как вы хотите, чтобы это было, чтобы мы могли визуализировать, какой результат вы ищете
Ответ №1:
Вы можете использовать pd.to_datetime
для преобразования всего столбца в datetime
тип.
gt;gt;gt; import pandas as pd gt;gt;gt; gt;gt;gt; df = pd.DataFrame({'Col': [20210917,20210918, 20210919, 20210920]}) gt;gt;gt; gt;gt;gt; df.Col = pd.to_datetime(df.Col, format='%Y%m%d') gt;gt;gt; df Col 0 2021-09-17 1 2021-09-18 2 2021-09-19 3 2021-09-20 gt;gt;gt; df['Year'] = df.Col.dt.year gt;gt;gt; df['Month'] = df.Col.dt.month gt;gt;gt; df['Day'] = df.Col.dt.day gt;gt;gt; gt;gt;gt; df Col Year Month Day 0 2021-09-17 2021 9 17 1 2021-09-18 2021 9 18 2 2021-09-19 2021 9 19 3 2021-09-20 2021 9 20
Если вы хотите получить результат в виде списка, вы можете использовать понимание списка вместе с zip
функцией.
gt;gt;gt; [(year, month, day) for year, month, day in zip(df.Year, df.Month, df.Day)] [(2021, 9, 17), (2021, 9, 18), (2021, 9, 19), (2021, 9, 20)]
Ответ №2:
Разделите каждую строку следующим образом тремя новыми столбцами: год, месяц, день
import pandas as pd df = pd.DataFrame({"date":[20210901,20210902, 20210903, 20210904]}) # split date field to three fields: year month day df["year"] = df["date"].apply(lambda x: str(x)[:4]) df["month"] = df["date"].apply(lambda x: str(x)[4:6]) df["day"] = df["date"].apply(lambda x: str(x)[6:]) print(df)
результат выглядит следующим образом
# result is: date year month day 0 20210901 2021 09 01 1 20210902 2021 09 02 2 20210903 2021 09 03 3 20210904 2021 09 04
Ответ №3:
Я создал простую функцию, которая вернет заархивированный список в нужном вам формате
def convert_to_dates(df): dates = [] for i,v in x.iterrows(): dates.append(v.values[0]) for i in range(len(dates)): dates[i] = str(dates[i]) years = [] months = [] days = [] for i in range(len(dates)): years.append(dates[i][0:4]) months.append(dates[i][4:6]) days.append(dates[i][6:8]) return list(zip(years, months, days))
Вызовите его с помощью convert_to_dates(x)
Выход:
In [4]: convert_to_dates(x) Out[4]: [('2021', '09', '01'), ('2021', '09', '02'), ('2021', '09', '03'), ('2021', '09', '04')]