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

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

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

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

pandas

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

Q&A

1回答

1069閲覧

[超初心者]pandasでのデータの扱い方についてのエラー

monolista

総合スコア11

Python

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

pandas

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

0グッド

0クリップ

投稿2019/01/19 03:54

前提・実現したいこと

ファイルから読み込んで、そのデータを解析するプログラムを作っています。
ファイルの中身はこのような形になっています。2つの値の隙間はタブです。
実行したところエラーが出力されますが、原因がわかりません解決方法を教えていただけないでしょうか。
超初心者のためどうしてエラーが出るのかまで説明頂けると助かります。

txt

13.218 2.65 23.8913 2.7 33.1058 2.75 40.6972 2.8 5-1.4852 2.85 6-2.8285 2.9 7-2.8285 2.95 8-5.2949 3.0 9-7.2063 3.05 10-9.7478 3.1 11-11.3379 3.15 12-11.3379 3.2 13-12.0789 3.25 14-10.8259 3.3 15-7.0937 3.35 16-2.2687 3.4 172.7694 3.45

発生している問題・エラーメッセージ

ソースコードのなかのこの部分でエラーが出力されています。

df[0] = df[0].apply(float)

出力されるエラー

Traceback (most recent call last): File "kaisekitamesi.py", line 13, in <module> df[0] = df[0].apply(float) File "/home/hydrogen/anaconda3/lib/python3.7/site-packages/pandas/core/series.py", line 3194, in apply mapped = lib.map_infer(values, f, convert=convert_dtype) File "pandas/_libs/src/inference.pyx", line 1472, in pandas._libs.lib.map_infer TypeError: float() argument must be a string or a number, not 'NoneType'

該当のソースコード

Python

1# coding: utf-8 2import pandas as pd 3import matplotlib.pyplot as plt 4# 仮データ作成 5t=open('date1.txt') #この中に解析するデータが入っている 6text=t.read() 7through_line = 30 # 検出中スルー幅(本来は100) 8threshold = 12 # 閾値の設定 9 10text = text.split('\n') #改行で分ける 11text = [i.split() for i in text] #隙間で分ける 12df = pd.DataFrame(text) 13df[0] = df[0].apply(float) 14df[1] = df[1].apply(float) # ①ここでfloat型のdf完成 15df[2] = df[0].shift() # ②shiftカラムをつくる 16df[3] = abs(df[2] - df[0]) # ③絶対値差カラムつくる 17 18threshold_list = [] # ④閾値を超えたindexの検出 19for i, j in enumerate(list(df[3])): 20 if j >= threshold: # 閾値の判断 21 threshold_list.append(i) 22#print(threshold_list) 23print(i) 24a = 0 # 検出中判断の仮変数(この変数で、2重検出を除く) 25last_list = [] # ⑤最終の開始indexリスト 26for i in threshold_list: 27 if a <= i: # 前回の検出中かどうか 28 last_list.append(i) 29 a = i+through_line # 検出中の同時出現スルー幅設定 30 31final_answer =[] # ⑥最終の数値リストのリスト 32print(len(last_list)) 33 34 35for i in last_list: 36 37 final_answer.extend(list(df[0])[i:i+through_line]) # スルー幅のリストを抽出 38 print(final_answer) 39 plt.plot(final_answer) 40 final_answer.clear() 41 42plt.show() 43print(last_list) # 最終の開始indexリスト 44 # 最終の数値リストのリスト 45df = pd.DataFrame(final_answer) 46#print(df) 47
### 試したこと 読み込むファイルの最終行に スペースが入っているか確認しましたが入っていませんでした。 13,14行目の書き方が悪いのではないかと思っていますが、書き方がわからない状態です。

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

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

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

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

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

guest

回答1

0

エラーの原因はおそらく、データ最終行に改行が含まれているため、
text = text.split('\n')
にてリスト最後に空文字が含まれてしまったことにより
df[0] = df[0].apply(float)
がエラー(入力としてNoneは不適)を出しているのかと思います。

とりあえずはデータ最後の改行を削除することでエラーはなくなるかと思いますが、データ読み込み部がかなり冗長な処理を行っているので

Python

1t=open('date1.txt') #この中に解析するデータが入っている 2text=t.read() 3through_line = 30 # 検出中スルー幅(本来は100) 4threshold = 12 # 閾値の設定 5 6text = text.split('\n') #改行で分ける 7text = [i.split() for i in text] #隙間で分ける 8df = pd.DataFrame(text) 9df[0] = df[0].apply(float) 10df[1] = df[1].apply(float) # ①ここでfloat型のdf完成

の部分を修正して

Python

1df = pd.read_table('date1.txt', header=None, dtype=float) 2 3through_line = 30 # 検出中スルー幅(本来は100) 4threshold = 12 # 閾値の設定

でとすると良いかと思います。
(セパレータがタブであることを前提としております)

あと、

13,14行目の書き方が悪いのではないかと思っていますが、書き方がわからない状態です。

列の型を変換したい場合は apply() ではなく astype() を使うほうが適当かと思います。

投稿2019/01/20 23:58

magichan

総合スコア15898

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問