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

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

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

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

pandas

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

Q&A

解決済

1回答

2582閲覧

テキストファイルを途中から読み込んでDataframeを作成する

sssan

総合スコア10

Python

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

pandas

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

0グッド

1クリップ

投稿2019/11/14 02:59

編集2019/11/18 02:08

デスクトップ上にある以下の様な分光測定データのテキストフォルダを
pandasで読み込もうと思っています。
---------------------------
サンプル: A
ファイル名: B
オペレータ: C

ピーク No. ピーク (nm) 高さ (%)
1      1000   90
2      2000   80
3      3000   70

データ
nm %
0 95
100 94
200 93
・ ・
・ ・
---------------------------
上記のサンプル名~ピークNo.を飛ばしてデータ以下のnm、%のデータフレームを作りたいです。
ピークNo.の行は1.2.3・・・と行数がファイルごとに固定されていません。

import pandas as pd import os with open("text.TXT") as f: nSkiprow = 0 for line in f.readlines(): nSkiprow += 1 if not line.startswith("データ"): continue else: break df = pd.read_table(f, skiprows=nSkiprow) print(df)

できれば上記にwithopenで指定したファイルを読み込み、
後からいろいろ付け足していきたいのですが上手くいきません。
どのようにすれば上手く読み込むことができますか?
よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

スキップする行数がわかっていればskiprowsで最初の何行かを無視してやるのはどうでしょうか。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_table.html


下記のioモジュールはファイルオープンなどに適宜読み替えてください。

python

1import io 2import pandas 3 4s = """サンプル: A 5ファイル名: B 6オペレータ: C 7 8ピーク No. ピーク (nm) 高さ (%) 91      1000   90 102      2000   80 113      3000   70 12 13データ 14nm % 150 95 16100 94 17200 93""" 18 19f = io.StringIO(s) # ファイルオープンと思ってください 20 21# データをまでの行数をカウントする 22nSkiprow = 0 23 24for line in f.readlines(): 25 nSkiprow += 1 26 if line.startswith("データ"): 27 break 28 29# 上で求めた行数をスキップしてread_tableで読み込む 30f = io.StringIO(s) 31df = pandas.read_table(f, skiprows=nSkiprow)

StringIOを省くとこうなります。

python

1filename = "text.TXT" 2 3# "データ"までの行数をカウント 4with open(filename) as f: 5 nSkiprow = 0 6 for line in f.readlines(): 7 nSkiprow += 1 8 if line.startswith("データ"): 9 break 10 11# 上で求めた行数をスキップしてread_tableで読み込む 12df = pandas.read_table(filename, skiprows=nSkiprow)

投稿2019/11/14 18:34

編集2019/11/18 02:41
tachikoma

総合スコア3601

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

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

sssan

2019/11/15 00:28

ご回答ありがとうございます。 書き忘れていたのですが、 ピーク No.の行数が測定データ毎に変わるので一概にスキップする数を指定できません…
tachikoma

2019/11/15 08:04

そうすると、データもしくはnmから始まる行の探し方が問題ということでしょうか。
sssan

2019/11/15 08:35

仰る通りです。 nmから始まる行の探し方がわかりません。 説明不足で申し訳ございません。
tachikoma

2019/11/15 09:11

そうすると、まずファイルを1行ずつ読み込んで、特定のキーワードから始まる行を見つけるまで繰り返せば良さそうですね。あとでコードを書いてみます。
sssan

2019/11/18 01:37 編集

コードまでご教授頂きありがとうございます。 実行してみたところ、以下の様なエラーが出ました。 Traceback (most recent call last): File "test.py", line 9, in <module> f = io.StringIO(s) TypeError: initial_value must be str or None, not _io.TextIOWrapper ちなみにコードは以下の通りです。 import numpy as np import pandas as pd import os import sys import io with open("text.TXT") as s: f = io.StringIO(s) nSkiprow = 0 for line in f.readlines(): nSkiprow += 1 if not line.startswith("データ"): continue else: break f = io.StringIO(s) df = pandas.read_table(f, skiprows=nSkiprow) 解決方法ございますでしょうか?
tachikoma

2019/11/18 01:41

with open("text.TXT") as f: として(sをfに置き換え) f = io.StringIO(s) を削除してください。io.StringIOはスクリプト上でファイル読み込みをエミュレートするためだけに使ったものです。
sssan

2019/11/18 02:07

早速ご回答いただきありがとうございます。 ValueError: I/O operation on closed file. というエラーが出てしまいました。。。
sssan

2019/11/18 02:47

読み込むことができました! 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問