비망록(「사용자 정의」된 시각의 취득·환산, 크로스 집계)
소개
구상 설계의 제1 스텝인 「원 데이터에 대해, 「사원명과 작업 시간 이외가 같은 값이라면 작업 시간을 통합한다」처리를 거는」를 실장할 수 있었기 때문에 정리한다.
htps : // 이 m / ぇ ぇ l ぇ l 3176 / ms / 7d 981b479c5933bf5f
그림 : 원시 데이터 발췌
직원 이름은 데이터로 필요하지 않으므로 직원 이름을 삭제하고 직원 이름 이외의 정보가 모두 동일하면 작업 시간을 합산하고 싶습니다.
완성된 프로그램
programimport pandas as pd
df=pd.read_excel('/content/drive/My Drive/Colab Notebooks/data2.xlsx')
df["区分"]=df["区分"]+df["業務"] #後工程で必要なので区分と業務は一括表示にする
df=df.rename(columns = {'区分':'業務区分'} #行の見出しも変更しておく
df["作業時間"] = pd.to_datetime(df["作業時間"],format="%H:%M:%S")
#作業時間が生データだとエクセルのユーザー定義で入力されていたので、フォーマット指定で文字列からdatetimeに変換
df["作業時間"] = df["作業時間"].dt.minute
#数値は[~~分][~~時間]で表示するとの要求があるので、datetimeを[分]に換算したint型にする
df2=df.groupby(["テーマ","月日","国名","業務区分"],as_index=False).sum()
#社員名以外で集約する。df.groupbyの結果は代入しないと保存されないので注意する
df2.to_excel('/content/drive/My Drive/Colab Notebooks/data5.xlsx')
그림: 프로그램의 출력 결과
업무 구분의 문자열 결합, 사원명의 삭제, 시간의 집계가 실현되고 있으므로 OK로 한다
"프로그램 중에 발생한 오류 및 실패"와 그 개요
1. to_datetime으로 문자열에서 시간으로 변환할 수 없음
df["作業時間"] = pd.to_datetime(df["作業時間"])
-->TypeError: <class 'datetime.time> is not convertible to datetime
#エクセルの「表示形式」に問題が在った。ユーザー定義の「hh:mm」を使っており、デフォルトのto_datetimeではこれが読めなかった
#formatオプションを使い、該当列の記述方式を指定することで解決
df["作業時間"] = pd.to_datetime(df["作業時間"],format="%H:%M:%S") #これでOK
2. 작업 시간이 groupby로 집계되지 않음
실패 버전df["作業時間"] = pd.to_datetime(df["作業時間"],format="%H:%M:%S")
df.groupby("国名").mean()
ValueError: No axis named テーマ for object type <class 'pandas.core.frame.DataFrame'>
위 그림과 같이 출력되어 버려 "작업 시간"에서의 집계가 발생하지 않았다.
원인은 datetime 형식이 groupby 함수의 집계치로서 인식되지 않았기 때문이라고 생각된다.
완성품처럼 datetime을 int형으로 변경해 해결.
성공 버전df["作業時間"] = pd.to_datetime(df["作業時間"],format="%H:%M:%S")
df["作業時間"] = df["作業時間"].dt.minute
df.groupby("国名").mean()
이것으로 작업시간이 집계측에 ~~[분]의 형태로 받아들였다.
3. AttributeError: 'Series' object has no attribute 'minute'
df["作業時間"] = df["作業時間"].minute #これを使ってエラーが発生
--> AttributeError: 'Series' object has no attribute 'minute'
#.dtが抜けていたので、df["作業時間"]という一連の配列を対象とした処理が行えなかった
df["作業時間"] = df["作業時間"].dt.minute #これが正解
4. ValueError: No axis named HOGE for object type class'pandas.core.frame.DataFrame'
df.groupby("国名","テーマ").sum() #これを使ってエラーが発生
-->ValueError: No axis named テーマ for object type <class 'pandas.core.frame.DataFrame>
#groupby関数で複数のインデックスを使用するときの記述ミス。[]が足りなかった。
df.groupby(["テーマ","国名"]).sum() #これでOK
참고로 한 페이지/사이트
rename ()을 사용하여 열 이름을 변경할 수 없습니다 htps : // 놀라운 l. 코m/쿠에 s치온 s/291634
Pandas groupby 사용법 htps : // 코 m / p 로페 / ms / 아 9 아 32b878c77222630
Pandas에서 Series.dt ()를 사용하여 날짜를 변환하는 방법 htps : // 코 m / 타케무라 T / ms / 79b16313 45576 b6492
Reference
이 문제에 관하여(비망록(「사용자 정의」된 시각의 취득·환산, 크로스 집계)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/wellwell3176/items/443d6d87fe586bde4f5f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
program
import pandas as pd
df=pd.read_excel('/content/drive/My Drive/Colab Notebooks/data2.xlsx')
df["区分"]=df["区分"]+df["業務"] #後工程で必要なので区分と業務は一括表示にする
df=df.rename(columns = {'区分':'業務区分'} #行の見出しも変更しておく
df["作業時間"] = pd.to_datetime(df["作業時間"],format="%H:%M:%S")
#作業時間が生データだとエクセルのユーザー定義で入力されていたので、フォーマット指定で文字列からdatetimeに変換
df["作業時間"] = df["作業時間"].dt.minute
#数値は[~~分][~~時間]で表示するとの要求があるので、datetimeを[分]に換算したint型にする
df2=df.groupby(["テーマ","月日","国名","業務区分"],as_index=False).sum()
#社員名以外で集約する。df.groupbyの結果は代入しないと保存されないので注意する
df2.to_excel('/content/drive/My Drive/Colab Notebooks/data5.xlsx')
그림: 프로그램의 출력 결과
업무 구분의 문자열 결합, 사원명의 삭제, 시간의 집계가 실현되고 있으므로 OK로 한다
"프로그램 중에 발생한 오류 및 실패"와 그 개요
1. to_datetime으로 문자열에서 시간으로 변환할 수 없음
df["作業時間"] = pd.to_datetime(df["作業時間"])
-->TypeError: <class 'datetime.time> is not convertible to datetime
#エクセルの「表示形式」に問題が在った。ユーザー定義の「hh:mm」を使っており、デフォルトのto_datetimeではこれが読めなかった
#formatオプションを使い、該当列の記述方式を指定することで解決
df["作業時間"] = pd.to_datetime(df["作業時間"],format="%H:%M:%S") #これでOK
2. 작업 시간이 groupby로 집계되지 않음
실패 버전df["作業時間"] = pd.to_datetime(df["作業時間"],format="%H:%M:%S")
df.groupby("国名").mean()
ValueError: No axis named テーマ for object type <class 'pandas.core.frame.DataFrame'>
위 그림과 같이 출력되어 버려 "작업 시간"에서의 집계가 발생하지 않았다.
원인은 datetime 형식이 groupby 함수의 집계치로서 인식되지 않았기 때문이라고 생각된다.
완성품처럼 datetime을 int형으로 변경해 해결.
성공 버전df["作業時間"] = pd.to_datetime(df["作業時間"],format="%H:%M:%S")
df["作業時間"] = df["作業時間"].dt.minute
df.groupby("国名").mean()
이것으로 작업시간이 집계측에 ~~[분]의 형태로 받아들였다.
3. AttributeError: 'Series' object has no attribute 'minute'
df["作業時間"] = df["作業時間"].minute #これを使ってエラーが発生
--> AttributeError: 'Series' object has no attribute 'minute'
#.dtが抜けていたので、df["作業時間"]という一連の配列を対象とした処理が行えなかった
df["作業時間"] = df["作業時間"].dt.minute #これが正解
4. ValueError: No axis named HOGE for object type class'pandas.core.frame.DataFrame'
df.groupby("国名","テーマ").sum() #これを使ってエラーが発生
-->ValueError: No axis named テーマ for object type <class 'pandas.core.frame.DataFrame>
#groupby関数で複数のインデックスを使用するときの記述ミス。[]が足りなかった。
df.groupby(["テーマ","国名"]).sum() #これでOK
참고로 한 페이지/사이트
rename ()을 사용하여 열 이름을 변경할 수 없습니다 htps : // 놀라운 l. 코m/쿠에 s치온 s/291634
Pandas groupby 사용법 htps : // 코 m / p 로페 / ms / 아 9 아 32b878c77222630
Pandas에서 Series.dt ()를 사용하여 날짜를 변환하는 방법 htps : // 코 m / 타케무라 T / ms / 79b16313 45576 b6492
Reference
이 문제에 관하여(비망록(「사용자 정의」된 시각의 취득·환산, 크로스 집계)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/wellwell3176/items/443d6d87fe586bde4f5f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
df["作業時間"] = pd.to_datetime(df["作業時間"])
-->TypeError: <class 'datetime.time> is not convertible to datetime
#エクセルの「表示形式」に問題が在った。ユーザー定義の「hh:mm」を使っており、デフォルトのto_datetimeではこれが読めなかった
#formatオプションを使い、該当列の記述方式を指定することで解決
df["作業時間"] = pd.to_datetime(df["作業時間"],format="%H:%M:%S") #これでOK
df["作業時間"] = pd.to_datetime(df["作業時間"],format="%H:%M:%S")
df.groupby("国名").mean()
ValueError: No axis named テーマ for object type <class 'pandas.core.frame.DataFrame'>
df["作業時間"] = pd.to_datetime(df["作業時間"],format="%H:%M:%S")
df["作業時間"] = df["作業時間"].dt.minute
df.groupby("国名").mean()
df["作業時間"] = df["作業時間"].minute #これを使ってエラーが発生
--> AttributeError: 'Series' object has no attribute 'minute'
#.dtが抜けていたので、df["作業時間"]という一連の配列を対象とした処理が行えなかった
df["作業時間"] = df["作業時間"].dt.minute #これが正解
df.groupby("国名","テーマ").sum() #これを使ってエラーが発生
-->ValueError: No axis named テーマ for object type <class 'pandas.core.frame.DataFrame>
#groupby関数で複数のインデックスを使用するときの記述ミス。[]が足りなかった。
df.groupby(["テーマ","国名"]).sum() #これでOK
rename ()을 사용하여 열 이름을 변경할 수 없습니다 htps : // 놀라운 l. 코m/쿠에 s치온 s/291634
Pandas groupby 사용법 htps : // 코 m / p 로페 / ms / 아 9 아 32b878c77222630
Pandas에서 Series.dt ()를 사용하여 날짜를 변환하는 방법 htps : // 코 m / 타케무라 T / ms / 79b16313 45576 b6492
Reference
이 문제에 관하여(비망록(「사용자 정의」된 시각의 취득·환산, 크로스 집계)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/wellwell3176/items/443d6d87fe586bde4f5f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)