programing

팬더를 사용하여 날짜 및 시간 열 결합

css3 2023. 6. 4. 22:29

팬더를 사용하여 날짜 및 시간 열 결합

다음과 같은 열이 있는 판다 데이터 프레임이 있습니다.

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)

이것은 다른 사람들에게 도움이 될 수 있습니다.

또한, 저는 다른 접근 방식을 테스트했습니다.replacecombine:

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