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

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

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

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

Q&A

解決済

3回答

532閲覧

条件にあてはまるデータを抽出し、別ファイルとして保存したい。

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

0クリップ

投稿2018/03/06 05:04

編集2018/03/06 06:10

Bのファイルから、Aのファイルのリストに合致するデータのみを全て抽出したいのですが
うまくいきません。

例えば、Aにはある市町村でみられる花のデータがあり、Bにはある市町村の食物(産物)のデータがあるとします。
(Aの市町村はBに必ず入っています。)
Bのファイルから、Aと同じ市町村(リスト)のデータのみを抽出し、新ファイルを作成したいのですがうまくいきません。
isinの使用法が違うのでしょうか。
照合したいリストの列名は、どちらも同じ項目名(この例だと”市町村”)を使用しています。

dfA = pd.read_csv('花.csv', encoding="cp932")
dfB = pd.read_csv('果物.csv', encoding="cp932")

list = dfA["市町村"]
df = dfB[dfB["市町村".isin([list])]]
df.to_csv('まとめ.csv', encoding='cp932')

追記します。
こんな感じのcsvです。
左のリスト(この例だと市町村)をそれぞれ照合し、最終的にはAのデータの右側にBのデータを追記したいです。
python利用だと一度にデータ加工ができそうと思ったのですが、
エクセルの重複などでデータ加工した方が早そうでしょうか。。。

dfA head(100)

市町村 花種     種巻き日  球根(種)収穫日
a チューリップ  2016/10/05 2017/05/08
b  あさがお    2016/05/05 2016/08/27
c  ローズ    2016/07/13 2016/12/01
..............

dfB head(1000)
市町村 果物    種巻き日   収穫日
a  いちご   2016/12/05 2017/02/08
a さくらんぼ   2016/04/08 2016/06/11
a  もも    2016/03/21 2016/07/30
c いちご   2016/12/15 2017/02/14
.......

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/03/06 05:53

dfAとdfBがどんなデータになっているか見せていただけないでしょうか。データ数が多い場合はdfA.head()等の数行でお願いします。
退会済みユーザー

退会済みユーザー

2018/03/06 06:11

回答ありがとうございます。データについて追記しました。
KojiDoi

2018/03/06 09:28

市町村コードの重複がdfbにありますが、dfaの方はどうなのでしょうか。 また、市町村aのようなケースで、マージ後のデータはどうなっているべきなのでしょうか。
退会済みユーザー

退会済みユーザー

2018/03/06 10:24

dfaの重複はなく、dfbのみ、重複しているものもあります。最終的には、一市町村につき、dfaの花のデータと、dfbの果物のデータ(市町村により複数)を横向きにつなげたいと思っています。条件が多いので、pythonだとミスなくデータ加工できそうかな、と挑戦しているところです。
guest

回答3

0

Python

1dfB[dfB['市町村'].isin(dfA['市町村'])]

投稿2018/03/06 05:40

magichan

総合スコア15898

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

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

退会済みユーザー

退会済みユーザー

2018/03/06 05:48

回答ありがとうございます。こちらでも、やはり「Initializing from file failed」と表示され ファイルが読み込めないようです。データに日本語が多いとエラーになりやすい、などがあるのでしょうか。。。 ファイルそのものを見直してみます。
KojiDoi

2018/03/06 07:14

全角スペースと半角スペースが混じったりしてませんか?
退会済みユーザー

退会済みユーザー

2018/03/06 10:18

アドバイスありがとうござます☆スペースはすべて半角のようでした。他にも、ちょっとしたミスがないかもう少し見直してみます。
magichan

2018/03/06 10:50

read_csv() の引数に engine='python' を指定してみても駄目ですかね? ↓こんな感じ pd.read_csv('花.csv', encoding="cp932", engine='python' )
退会済みユーザー

退会済みユーザー

2018/03/07 00:37

回答ありがとうございます。やはりエラーとなりました。。。ファイル間で、項目の数、重複の有無などがあるからかもしれません。
guest

0

こういう感じで処理してはどうでしょう。

python

1import pandas as pd 2merged_df = pd.merge(dfA, dfB, on="市町村")

コメントを受けて追記:以下の結果は要求を満たしてるでしょうか?

import pandas as pd dfA = pd.read_csv('花.csv', encoding="cp932") dfB = pd.read_csv('果物.csv', encoding="cp932") xx = list() for i in range(0, len(dfA.index)): city = dfA.loc[i, "市町村"] x = [d for d in dfB.loc[dfB["市町村"]==city,"果物"]] xx.append(x) xx_df = pd.DataFrame(xx) res = pd.concat([dfA, xx_df], axis=1) print(res)

投稿2018/03/06 05:15

編集2018/03/06 15:37
KojiDoi

総合スコア13669

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

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

退会済みユーザー

退会済みユーザー

2018/03/06 05:25

早速の回答ありがとうございます。 marge,concatともに試してみましたが、うまくいきませんでした。また、語尾にhow='inner'も追記しましたが、こちらもうまくいきませんでした。ファイルそのものを読み込まないようなので、もう少し見直してみます。
guest

0

ベストアンサー

先に、dfBについて、データ整理することにしました。同じ市町村名でグループ分けし、データを横向きに表示。それからdfAと結合することにしました。
dfB = df.groupby('市町村')
.apply(
lambda x:
pd.DataFrame([[list(x.市町村)[0]] +
list(chain.from_iterable(zip(x.果物, x.種まき日, x.収穫日)))]))
.reset_index(drop=True)

dfB.to_csv('果物まとめ.csv', encoding='cp932')

理想では、項目を市町村、[果物1,種まき日1,収穫日1],[果物2,・・2,・・ 2],[果物3,・・・]・・・のようにしたかったのですが、下記の式ではうまくいきませんでした。
dfB.columns = ['市町村'] + chain.from_iterable(['果物'+str(i+1), '種まき日'+str(i+1), '収穫日'+str(i+1)])

一緒に考えて下さった方、どうもありがとうございました☆

投稿2018/03/08 01:27

編集2018/03/08 01:29
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問