팬더를 사용하여 날짜 및 시간 열 결합
다음과 같은 열이 있는 판다 데이터 프레임이 있습니다.
data = {'Date': ['01-06-2013', '02-06-2013', '02-06-2013', '02-06-2013', '02-06-2013', '03-06-2013', '03-06-2013', '03-06-2013', '03-06-2013', '04-06-2013'],
'Time': ['23:00:00', '01:00:00', '21:00:00', '22:00:00', '23:00:00', '01:00:00', '21:00:00', '22:00:00', '23:00:00', '01:00:00']}
df = pd.DataFrame(data)
Date Time
0 01-06-2013 23:00:00
1 02-06-2013 01:00:00
2 02-06-2013 21:00:00
3 02-06-2013 22:00:00
4 02-06-2013 23:00:00
5 03-06-2013 01:00:00
6 03-06-2013 21:00:00
7 03-06-2013 22:00:00
8 03-06-2013 23:00:00
9 04-06-2013 01:00:00
&data['데이터'] & ']을 수 ?Time'] 다음 정보를 얻을 수 있습니까?다음을 사용하여 수행할 수 있는 방법이 있습니까?pd.to_datetime
?
Date
01-06-2013 23:00:00
02-06-2013 01:00:00
02-06-2013 21:00:00
02-06-2013 22:00:00
02-06-2013 23:00:00
03-06-2013 01:00:00
03-06-2013 21:00:00
03-06-2013 22:00:00
03-06-2013 23:00:00
04-06-2013 01:00:00
예를 들어 다음을 사용하는 경우 이를 간접적으로 읽을 수 있었을지도 모른다는 점을 언급할 가치가 있습니다.parse_dates=[['Date', 'Time']]
.
이것들이 단지 문자열이라고 가정하면, 당신은 단순히 그것들을 (공백과 함께) 추가할 수 있고, 당신이 사용할 수 있게 해줄 수 있습니다. 이것은 지정하지 않고 작동합니다.format=
In [11]: df['Date'] + ' ' + df['Time']
Out[11]:
0 01-06-2013 23:00:00
1 02-06-2013 01:00:00
2 02-06-2013 21:00:00
3 02-06-2013 22:00:00
4 02-06-2013 23:00:00
5 03-06-2013 01:00:00
6 03-06-2013 21:00:00
7 03-06-2013 22:00:00
8 03-06-2013 23:00:00
9 04-06-2013 01:00:00
dtype: object
In [12]: pd.to_datetime(df['Date'] + ' ' + df['Time'])
Out[12]:
0 2013-01-06 23:00:00
1 2013-02-06 01:00:00
2 2013-02-06 21:00:00
3 2013-02-06 22:00:00
4 2013-02-06 23:00:00
5 2013-03-06 01:00:00
6 2013-03-06 21:00:00
7 2013-03-06 22:00:00
8 2013-03-06 23:00:00
9 2013-04-06 01:00:00
dtype: datetime64[ns]
▁the 없이.+ ' '
러나그나format=
매개 변수를 사용해야 합니다.추가적으로, 팬더는 변환될 형식을 추론하는 데 능숙합니다.datetime
그러나 정확한 형식을 지정하는 것이 더 빠릅니다.
pd.to_datetime(df['Date'] + df['Time'], format='%m-%d-%Y%H:%M:%S')
참고: 놀랍게도, 이것은 NaN이 NaT로 변환될 때 잘 작동하지만, 변환(아마도 사용)에 대해 걱정할 가치가 있습니다.raise
인수).
%%timeit
# sample dataframe with 10000000 rows using df from the OP
df = pd.concat([df for _ in range(1000000)]).reset_index(drop=True)
%%timeit
pd.to_datetime(df['Date'] + ' ' + df['Time'])
[result]:
1.73 s ± 10.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%%timeit
pd.to_datetime(df['Date'] + df['Time'], format='%m-%d-%Y%H:%M:%S')
[result]:
1.33 s ± 9.88 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
승인된 답변은 데이터 유형의 열에 대해 작동합니다.string
시간이라는 유형일 때 이 때 이 .열이 날짜 및 시간 데이터 유형일 때 이 작업을 수행하는 방법을 검색할 때 이 질문이 나타납니다.
df.apply(lambda r : pd.datetime.combine(r['date_column_name'],r['time_column_name']),1)
합니다.datetime
그리고.timestamp
또는str
및 use ) 를 사용합니다.to_datetime
:
df.loc[:,'Date'] = pd.to_datetime(df.Date.astype(str)+' '+df.Time.astype(str))
결과:
0 2013-01-06 23:00:00
1 2013-02-06 01:00:00
2 2013-02-06 21:00:00
3 2013-02-06 22:00:00
4 2013-02-06 23:00:00
5 2013-03-06 01:00:00
6 2013-03-06 21:00:00
7 2013-03-06 22:00:00
8 2013-03-06 23:00:00
9 2013-04-06 01:00:00
최고야.
이를 통해 날짜와 시간을 동일한 데이터 프레임 열에 병합할 수 있습니다.
import pandas as pd
data_file = 'data.csv' #path of your file
병합된 열이 있는 .csv 파일을 읽는 중 Date_시간:
data = pd.read_csv(data_file, parse_dates=[['Date', 'Time']])
이 줄을 사용하여 다른 두 열도 유지할 수 있습니다.
data.set_index(['Date', 'Time'], drop=False)
다음으로 변환할 수도 있습니다.datetime
문자열 연결 없이 , 를 결합하여 생성합니다.datetime
그리고.timedeltea
각각의 개체.와 결합하면 소스 영상 시리즈를 동시에 제거할 수 있습니다.
df['DateTime'] = pd.to_datetime(df.pop('Date')) + pd.to_timedelta(df.pop('Time'))
print(df)
DateTime
0 2013-01-06 23:00:00
1 2013-02-06 01:00:00
2 2013-02-06 21:00:00
3 2013-02-06 22:00:00
4 2013-02-06 23:00:00
5 2013-03-06 01:00:00
6 2013-03-06 21:00:00
7 2013-03-06 22:00:00
8 2013-03-06 23:00:00
9 2013-04-06 01:00:00
print(df.dtypes)
DateTime datetime64[ns]
dtype: object
저는 jka.ne 에 대해 논평할 충분한 평판이 없기 때문에:
저는 그것이 작동하기 위해 jka.ne 의 라인을 수정해야 했습니다.
df.apply(lambda r : pd.datetime.combine(r['date_column_name'],r['time_column_name']).time(),1)
이것은 다른 사람들에게 도움이 될 수 있습니다.
또한, 저는 다른 접근 방식을 테스트했습니다.replace
에 combine
:
def combine_date_time(df, datecol, timecol):
return df.apply(lambda row: row[datecol].replace(
hour=row[timecol].hour,
minute=row[timecol].minute),
axis=1)
OP의 경우는 다음과 같습니다.
combine_date_time(df, 'Date', 'Time')
큰 데이터 세트행)에 두 방식의 시간을 했는데, 둘다시간이 비슷하지만 하는 경우에는 비적큰데세트이터에개(500.000 행)행이대측해며으했정시간을다두다니사교합용둘을, 음만다실시지하비슷이간행의가지근상접식의방▁i▁appro다timesaches▁for,▁both▁(니합사용▁have▁similar▁but비▁using▁a▁run다을▁and교▁they▁timed음),>.combine
빠름(59초의 경우 )replace
와 50대 비교 »combine
).
먼저 올바른 데이터 유형을 지정해야 합니다.
df["Date"] = pd.to_datetime(df["Date"])
df["Time"] = pd.to_timedelta(df["Time"])
그런 다음 쉽게 결합할 수 있습니다.
df["DateTime"] = df["Date"] + df["Time"]
정답은 열 유형에 따라 달라집니다.저 같은 경우에는.datetime
그리고.timedelta
.
> df[['Date','Time']].dtypes
Date datetime64[ns]
Time timedelta64[ns]
이 경우 열을 추가하기만 하면 됩니다.
> df['Date'] + df['Time']
사용combine
함수:
datetime.datetime.combine(date, time)
여기에 한 대의 라이너가 있습니다.각 열의 두 문자열을 "" 공간 사이에 연결하기만 하면 됩니다.
df는 데이터 프레임이고 열은 '시간'과 '날짜'입니다.새 열은 날짜 및 시간입니다.
df['DateAndTime'] = df['Date'].str.cat(df['Time'],sep=" ")
또한 날짜/시간 개체와 같은 항목도 처리하려면 이 작업을 수행할 수 있습니다.필요에 따라 형식을 조정할 수 있습니다.
df['DateAndTime'] = pd.to_datetime(df['DateAndTime'], format="%m/%d/%Y %I:%M:%S %p")
건배!해피 데이터 크런치.
내 데이터 세트는 며칠 동안 1초의 해상도 데이터를 가지고 있었고 여기서 제안된 방법에 의한 구문 분석은 매우 느렸습니다.대신 다음을 사용했습니다.
dates = pandas.to_datetime(df.Date, cache=True)
times = pandas.to_timedelta(df.Time)
datetimes = dates + times
의 사용에 주의합니다.cache=True
파일에 고유한 날짜가 몇 개뿐이므로 날짜 및 시간 열을 결합한 경우에는 해당되지 않으므로 날짜를 매우 효율적으로 구문 분석할 수 있습니다.
데이터:
<TICKER>, <PER>, <DATE>, <TIME>, <OPEN>, <HIGH>, <LOW>, <CLOSE>, <VOL> SPFB.RTS, 1,2019103,100100,106580.0000000,107260.0000000,106570.0000000,107230.0000000,3726
코드:
data.columns = ['ticker', 'per', 'date', 'time', 'open', 'high', 'low', 'close', 'vol']
data.datetime = pd.to_datetime(data.date.astype(str) + ' ' + data.time.astype(str), format='%Y%m%d %H%M%S')
내 생각에 가장 좋은 해결책은 날짜를 구문 분석하는 것입니다.read_csv
(또는 다른 read_ 함수)를 직접 사용할 수 있습니다.date_parser에서 두 개의 열을 관리하는 방법은 명확하지 않지만 다음과 같습니다.
date_parser = lambda x,y: datetime.strptime(f"{x}T{y}", "%d-%m-%YT%H:%M:%S")
date = pd.read_csv('data.csv', parse_dates={'date': ['Date', 'Time']}, date_parser=date_parser)
언급URL : https://stackoverflow.com/questions/17978092/combine-date-and-time-columns-using-pandas
'programing' 카테고리의 다른 글
루비에서 객체에 대한 모든 메소드를 나열하는 방법은 무엇입니까? (0) | 2023.06.04 |
---|---|
도커선.도커 예외:서버 API 버전을 가져오는 중 오류 발생 (0) | 2023.06.04 |
Matplotlib의 빈 크기(히스토그램) (0) | 2023.06.04 |
Java Apache POI Excel PDF로 저장 (0) | 2023.06.04 |
Firebase 분석에서 Floatter 화면을 추적하려면 어떻게 해야 합니까? (0) | 2023.06.04 |