質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

0回答

1013閲覧

出力結果が実際のデータ数より少ない場合の対処法を教えてください。。

退会済みユーザー

退会済みユーザー

総合スコア0

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2019/11/08 06:03

前提・実現したいこと

テキストファイル【test_text.txt】から【開催月】の一覧を「年」と「月」に分けて抜き出し、それぞれファイルに書き込みpandasで処理をしたいと考えています。
(該当コードでは和暦を西暦に変換する関数【seireki()】を組み込みながら書いています。)

【test_text.txt】

イベント名 〇〇祭り 開催地 東京都 開催月 平成 3 年 10 月 備考 毎年10月の2週目の土曜日に開催 イベント名 〇〇パーティー 開催地 東京都 開催月 昭和 51 年 2 月 備考 . . .

【test_text.txt】には1834のイベントが同じように記入されており、抜き出したい【開催月】は必ず「開催月」の下に記されています。

発生している問題

【開催月】の一覧を「年」と「月」に分けて抜き出すことには成功したのですが、返ってきた結果が【出力結果1】のように1834rowsなければいけないはずが、【出力結果2】のように1819rowsしか返ってきませんでした。

【出力結果1】

['1991年'] ['1975年'] ['1989年'] ['1985年'] . . . ['1991年'] 1834rows × 1columns
myfile = open('test_text.txt', 'r', encoding='utf-8_sig') data = myfile.readlines() myfile.close() d_len = len(data) a = [] for i in range(d_len): element = data[i] element = element.rstrip() if(element=='開催月'): start_list = data[i+1].rstrip() #開催月の抜き出し start_list= start_list.replace(' ','') #空白を削除 start_seireki = re.findall(r'.+年', toshi_list) #開催月の開催年を西暦で抜き取る start_month = re.findall(r'[0-9]+月', toshi_list) #開催月の開催月を抜き取る for ss in start_seireki: ss = seireki(ss).replace('年','') #和暦を西暦に変換する関数seireki()を使用 a.append(ss)

【出力結果2】

1991 1975 1989 1985 . . . 1991 1819rows × 1columns

この場合どういう問題が考えられるのか、また実際のデータ数より少なくなってしまった場合どのように対処すればいいのかご教授いただければ幸いです。
分かりにくい箇所があれご指摘いただければ修正いたします。
よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

google colaboratory
windows

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

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

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

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

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

tiitoi

2019/11/08 06:11

element=='開催月' という if 文は1834回呼ばれているのでしょうか?呼ばれていないなら、「1834のイベントが同じように記入されており、抜き出したい【開催月】は必ず「開催月」の下に記されています。」という前提が間違っているのだと思います。 開催月の前後に空白があったりしてもマッチしなくなるので、その点も確認してみてください。
退会済みユーザー

退会済みユーザー

2019/11/08 06:22

ご回答ありがとうございます! 盲点だと思い、今test_text.txt内をCtrl + F で検索してみたところ、「開催月」にマッチするのは1834個ありました。。 前後に空白を半角・全角スペースを入れて検索したところ、マッチするものはありませんでした。。
tiitoi

2019/11/08 06:31

だとすると、開催日は1834個あるけれど、その下の正規表現 start_seireki = re.findall(r'.+年', toshi_list) にマッチするのが1819個しかないということではないでしょうか マッチしたかどうかは findall の返り値で確認できるので、マッチしなかった場合、どのような行なのか print してみてデバッグしてください
退会済みユーザー

退会済みユーザー

2019/11/08 06:40

ありがとうございます! おっしゃる通りNoneのところがありました! このNoneをそのままNaNに置き換えることは可能なのでしょうか??
tiitoi

2019/11/08 06:42

findall の結果が None だったら、a.append(None) というように None を追加するようにしてはどうでしょうか
退会済みユーザー

退会済みユーザー

2019/11/08 06:49

解決しました! ありがとうございますm(__)m
退会済みユーザー

退会済みユーザー

2019/11/08 06:51

ベストアンサーにさせて頂きたいので、ぜひ回答に一言いただけませんかm(__)m?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問