본문 바로가기

전체 글263

[pandas] 데이터 프레임 2개를 concat할 때 열을 교대로 concat하는 방법 다음 두개의 데이터 프레임이 있다 import pandas as pd data1 = [[1, 2, 3], [4, 5, 6]] data2 = [[5, 2, 4], [3, 5, 1]] df1 = pd.DataFrame(data1, columns=['a1', 'd1', 'c1']) df2 = pd.DataFrame(data2, columns=['a2', 'd2', 'c2']) df1 df2 df1과 df2의 열을 교대로 합쳐보자. 열의 순서가 a1-a2-d1-d2-c1-c2가 되면 된다 그냥 concat한 다음에 sort_index 함수로 정렬을 하면 그저 a1-a2-c1-c2-d1-d2의 순서가 되므로 가능하지 않다 다음의 방법을 사용하자 1. 먼저 df1.columns와 df2.columns를 교대로 합친.. 2023. 5. 4.
[pandas] assign 함수로 열을 만들 때 특수문자가 있는 경우 해결 방법 다음 데이터 프레임의 각 행의 합을 구해서 열로 만들어보자 import pandas as pd data = {'colA':[1, 2, 3], 'colB':[4, 5, 6]} df = pd.DataFrame(data) df: 각 행의 합을 구해보자 아래와 같은 코드로 가능하다 df.sum(axis=1) 각 행의 합을 하나의 열로 만들어주자. 열의 이름은 sum of cols 로 만들자 당연히 아래와 같은 배정방식으로 열만들기를 하면 만들 수 있다 df['sum of cols'] = df.sum(axis=1) df: 배정 방식을 사용하면 간단하지만 여러가지 이유로 (inplace(덮어쓰기)를 피하기 위하거나 여러개의 열을 생성할 경우) 열을 만드는 함수 assign을 사용할 때는 열 이름에 특수문자(이 경우.. 2023. 5. 3.
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 에러 메세지  ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 번역: 시리즈의 진릿값은 모호합니다. a.empty, a.bool(), a.item(), a.any() 또는 a.all()을 사용하세요. 이 오류는 판다스 초심자에게 매우 자주 발생하는 에러 중 하나입니다. 여러 가지 원인이 있을 수 있지만 특히, 조건문을 작성할 때 논리 연산을 잘못 사용할 때 빈번하게 발생합니다.  에러 발생 상황  에러가 발생하는 상황을 예시와 함께 살펴보겠습니다.import pandas as pd# 예시 데이터 프레임 생성df = pd.DataFrame( {'name': [.. 2023. 5. 3.
ValueError: Cannot subset columns with a tuple with more than one element. Use a list instead. import pandas as pd df = pd.DataFrame({'name': ['a', 'b', 'a', 'c'], 'colA': [ 3, 2, 5, 1], 'colB': [ 1, 2, 3, 4]}) df 예의 데이터 프레임을 name으로 그룹화 해서 colA와 colB를 모두 합산을 하고 싶다면 아래와 같은 코드를 사용하면 된다 df.groupby('name')[['colA', 'colB']].sum() groupby를 복수의 열에 적용하려면 대괄호 안에 리스트를 넣는 이중 대괄호가 되어야 한다. [['colA', 'colB']] 이것을 단일 대괄호 안에 넣으면 판다스 +2.0 부터 아래의 에러가 발생하니 반드시 이중대괄호에 넣자 df.groupby('name')['colA', 'colB'].s.. 2023. 5. 3.
[pandas] 24시를 넘는 시간표기를 정상적인 datetime으로 바꾸는 방법 가끔 24시를 넘는 시간표기를 하는 곳이 있다 (특히 영화관)가령 2023-01-02 00:20:00의 타임스탬프를 전일인 2023-01-01을 기준으로 24:20:00으로 표현한다이런 데이터를 정상적인 datetime으로 바꿔보자  import pandas as pds1 = pd.Series(['2022-01-01 23:50:00', '2022-01-01 24:10:00'])s1     s1은 24시가 넘는 시간을 갖고 있는 문자열 데이터이다.아래와 같은 코드를 사용하면 쉽게 해결된다  spl = s1.str.split(' ')pd.to_datetime(spl.str[0]) + pd.to_timedelta(spl.str[1])  2022-01-01 24:10:00 -> 2022-01-02 00:10:0.. 2023. 5. 2.
ValueError: unconverted data remains: 4 import pandas as pd pd.to_datetime('24', format='%H') ValueError: unconverted data remains: 4 %H로 시간 format을 변형할때 24 이상의 시각이 있을 때 발생하는 에러 24를 오버하는 시각이 있는 데이터를 정상적인 datetime으로 바꾸는 법 https://kimpanda.tistory.com/111 참고문헌 : https://stackoverflow.com/questions/61052483/valueerror-unconverted-data-remains-4 2023. 5. 2.