回答編集履歴

2

全角数字の元データに対応

2021/03/15 09:47

投稿

Daregada
Daregada

スコア11990

test CHANGED
@@ -1,6 +1,8 @@
1
1
  `pd.to_datetime`でdatetime64[ns]型に変換し、年月日を取り出してデータフレームに追加する。
2
2
 
3
3
 
4
+
5
+ 補足: 元データが質問時の書き間違い(よくある)ではなく、実際に全角数字で書かれていることが判明したので、それを半角数字に変換するコードを追加。
4
6
 
5
7
 
6
8
 
@@ -16,9 +18,9 @@
16
18
 
17
19
  日付
18
20
 
19
- 2020310
21
+ 202010
20
22
 
21
- 2020311
23
+ 202011
22
24
 
23
25
  """
24
26
 
@@ -36,9 +38,9 @@
36
38
 
37
39
 
38
40
 
39
- # 日付列の文字列をdatetime64[ns]型に変換する
41
+ # 日付列の文字列中の全角数字半角数字に変換後、datetime64[ns]型に変換する
40
42
 
41
- df['日付'] = pd.to_datetime(df['日付'], format='%Y年%m月%d日')
43
+ df['日付'] = pd.to_datetime(df['日付'].map(lambda x: x.translate(x.maketrans("0123456789", "0123456789"))), format='%Y年%m月%d日')
42
44
 
43
45
 
44
46
 
@@ -66,11 +68,11 @@
66
68
 
67
69
  ```result
68
70
 
69
- 日付
71
+ 日付
70
72
 
71
- 0 2020310
73
+ 0 202010
72
74
 
73
- 1 2020311
75
+ 1 202011
74
76
 
75
77
  年 月 日
76
78
 

1

補足を追加

2021/03/15 09:46

投稿

Daregada
Daregada

スコア11990

test CHANGED
@@ -24,6 +24,8 @@
24
24
 
25
25
 
26
26
 
27
+ # 日本語の出力を固定幅フォントで揃える設定
28
+
27
29
  pd.set_option('display.unicode.east_asian_width', True)
28
30
 
29
31
 
@@ -34,9 +36,13 @@
34
36
 
35
37
 
36
38
 
39
+ # 日付列の文字列をdatetime64[ns]型に変換する
40
+
37
41
  df['日付'] = pd.to_datetime(df['日付'], format='%Y年%m月%d日')
38
42
 
39
43
 
44
+
45
+ # dtアクセサーを使って年月日を取得し、新たな列を追加
40
46
 
41
47
  df['年'] = df['日付'].dt.year
42
48
 
@@ -46,6 +52,8 @@
46
52
 
47
53
 
48
54
 
55
+ # 日付列を削除
56
+
49
57
  df.drop(columns='日付', inplace=True)
50
58
 
51
59
 
@@ -53,3 +61,21 @@
53
61
  print(df)
54
62
 
55
63
  ```
64
+
65
+
66
+
67
+ ```result
68
+
69
+ 日付
70
+
71
+ 0 2020年3月10日
72
+
73
+ 1 2020年3月11日
74
+
75
+ 年 月 日
76
+
77
+ 0 2020 3 10
78
+
79
+ 1 2020 3 11
80
+
81
+ ```