🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
並列処理

複数の計算が同時に実行される手法

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

Q&A

解決済

1回答

646閲覧

Pandasの日付けの処理について

watchdogs

総合スコア54

並列処理

複数の計算が同時に実行される手法

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

0グッド

0クリップ

投稿2021/03/15 04:24

編集2021/03/15 04:29

Pandasで日付けの処理についてお伺いしたいです。
下記のように1セルに年と月と日がまとまって記載されています。

日付列2列3
2020年3月10日
2020年3月11日

object型で記載されている

これらを年と月と日で
一つのセルに分けて記載したいです。

2020310
2020311
int型に変更したい。

使用言語はPythonでお願いします。
やり方がわからないので教えてほしいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

pd.to_datetimeでdatetime64[ns]型に変換し、年月日を取り出してデータフレームに追加する。

補足: 元データが質問時の書き間違い(よくある)ではなく、実際に全角数字で書かれていることが判明したので、それを半角数字に変換するコードを追加。

Python

1import pandas as pd 2import io 3 4txt = """ 5日付 62020年3月10日 72020年3月11日 8""" 9 10# 日本語の出力を固定幅フォントで揃える設定 11pd.set_option('display.unicode.east_asian_width', True) 12 13df = pd.read_csv(io.StringIO(txt)) 14print(df) 15 16# 日付列の文字列中の全角数字を半角数字に変換後、datetime64[ns]型に変換する 17df['日付'] = pd.to_datetime(df['日付'].map(lambda x: x.translate(x.maketrans("0123456789", "0123456789"))), format='%Y年%m月%d日') 18 19# dtアクセサーを使って年月日を取得し、新たな列を追加 20df['年'] = df['日付'].dt.year 21df['月'] = df['日付'].dt.month 22df['日'] = df['日付'].dt.day 23 24# 日付列を削除 25df.drop(columns='日付', inplace=True) 26 27print(df)

result

1 日付 20 2020年3月10日 31 2020年3月11日 4 年 月 日 50 2020 3 10 61 2020 3 11

投稿2021/03/15 04:52

編集2021/03/15 09:47
Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

watchdogs

2021/03/15 05:04

Daregada様 早速のご回答ありがとうございます。 テキストファイルではなく、csvの列から読み込ませる場合だと、 df = pd.read_csv(io.StringIO(df['日付'])) になるという認識でよいですか? しかしうまくいかないので教えていただいてもよろしいでしょうか。
Daregada

2021/03/15 05:08

ファイルから読む場合は、 df = pd.read_csv("ファイル名をココに書く") です。
watchdogs

2021/03/15 05:55

ありがとうございます。 型変換ができません。 ValueError: time data '2020年3月10日' does not match format '%Y年%m月%d日' (match) と出てえらが出ます。 解決策がわかりません。 大変お手数ですが教えていただけますでしょうか。 .csvで読み込ませています。
Daregada

2021/03/15 07:17 編集

あー、本当に全角数字で書いてあるんですね。 to_datetimeの第1引数を、 df['日付'].apply(lambda x: x.translate(x.maketrans('0123456789', '0123456789'))) に差し替えてください。
watchdogs

2021/03/15 07:59

そうですね全角で記載されています。 df['日付'] = pd.to_datetime(df['日付'].apply(lambda x: x.translate(x.maketrans('0123456789', '0123456789'))), format='%Y年%m月%d日') という認識で進めると、 AttributeError: 'float' object has no attribute 'translate' が出ます。
Daregada

2021/03/15 09:43

失礼、出先だったので実際に動かして確認できませんでした。 applyではなくmapです。 df['日付'] = pd.to_datetime(df['日付'].map(lambda x: x.translate(x.maketrans("0123456789", "0123456789"))), format='%Y年%m月%d日')
Daregada

2021/03/15 10:19

AttributeErrorの原因は、日付の文字列が存在せず、データフレームでは numpy.NaN になっているためかな。NaNはfloatの扱いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問