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

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

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

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

Q&A

解決済

3回答

424閲覧

pythonで2つのデータを読み込み、比較して新しいデータに書き込むプログラム

dddman

総合スコア13

Python

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

0グッド

1クリップ

投稿2018/12/03 14:41

pythonで、2つのデータを読み込み、新しく1つのデータに結果をまとめるプログラムを作りたいです。
読み込むデータは、deta1.txtは、

G15060 0.14790
G15061 -0.15789
G15062 0.25709
G15063 0.16780

deta2.txtは、
G15060 0.26890
G15061 0.35780
G15062 0.26907
G15063 -0.14370

というように左に名前(G15060など)、右に数値が表記されたものが縦に並んでいて、書き込みデータには、この2つのデータを比べて、どちらも0より大きい数値をもつものの名前が並んだものを表示させたいです。この例で言えば、
G15060
G15062
というように書き込みデータに表示させたいです。どのようなプログラムを作れば良いでしょうか。教えていただけると助かります。

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

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

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

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

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

guest

回答3

0

ベストアンサー

2つをjoinして、2つのval値がどちらも0より大きい行を抽出すればよいです。

Python

1# 2つのファイル読込は省略。どちらも'key','val'の列を持つものとする 2df = pd.merge(df1,df2, on='key') 3print(df[(df['val_x'] > 0) & (df['val_y'] > 0)]['key']) 4""" 50 G15060 62 G15062 7"""

投稿2018/12/03 15:09

can110

総合スコア38233

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

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

dddman

2018/12/05 05:24

回答ありがとうございます。このプログラムを書いて試してみたところ、NameError: name ‘pd’ is not definedと表示され、df=pd.mergeがうまく読み込まれません。どうしたら良いでしょうか。
can110

2018/12/05 06:09

最初に「import pandas as pd」してください。
dddman

2018/12/06 07:50

何度もすいません。再度プログラムを動かしてみたのですが、 Traceback (most recent call last): File ‘xxx.py’, line 15, in <module> df = pd.merge(sys.argv[1],sys.argv[2], on = ‘key’) File ‘C:¥Program Files (x86)¥Python¥lib¥site-packages¥pandas¥core¥reshape¥merge.py’, line53, in merge copy=copy, indicater = indicater) File ‘C:¥Program Files (x86)¥Python¥lib¥site-packages¥pandas¥core¥reshape¥merge.py’, line531, in_init_ ‘type{0}’.format(type(left))) ValueError: can not merge DataFrame with instance of type <class ‘str’> というエラーが出てしまったのですが、どうしたら良いでしょうか。読み込みファイルを見て、問題の行を確認してみたのですが、他の行と変わったところはなく、どうしたら良いか分かりませんでした。本当に何度も長々と申し訳ありせん。
can110

2018/12/06 07:59

回答に「2つのファイル読込は省略」と書いてあるとおり まずは2つのファイル内容をデータフレームdf1,df2に読み込む必要があります。 具体的なコードについては「pandas read_csv」などで調べてください。
dddman

2018/12/06 08:33

ありがとうございます。読み込みはできるようになりました。しかし、結果に series([], Name: key, dtype: object) しか表示されません。これはどういう意味なのでしょうか。本当に度々すいません。
can110

2018/12/06 08:38

ソースコードがないと何ともいえませんが… ファイルデータ内容はこの質問で提示されたとおり(空白区切り)でしょうか?であればread_csvでdelimter=' 'なりを指定する必要あります。 あるいはあらためて別質問を立てると的確な回答がつくかと思います。
dddman

2018/12/06 09:04

空白区切りの指定を忘れていました…。うまく動かすことができました。python初心者で質問も至らないところが多々あったと思いますが、本当にありがとうございました。
guest

0

Pythonなど不要。そう、シェル芸ならね!

bash

1$ join data1.txt data2.txt|awk '$2>0&&$3>0{print $1}' 2G15060 3G15062

投稿2018/12/03 14:48

hichon

総合スコア5737

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

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

0

ファイルからテキストデータを読み込む際にreadlinesを利用すると,各行ごとのテキストデータをリストとして受け取れます.

file = open("data1.txt", "r") text = file.readlines() file.colse() """ text = ["G15060 0.14790\n", ...] """

textに対して各要素ごとにsplitメソッドを用いると,("G1506060","14790")のようなタプル形式のデータが出来上がります.
このデータの2要素目をfloat型に変換してif文を使うことで0より大きいかが判断できるので,大きければファイルに書き込んでいけば質問のプログラムをかけると思います.
また,データファイルが二つあるので辞書型を利用するといいと思います.

投稿2018/12/03 15:46

RS-offline

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問