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

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

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

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

pandas

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

Q&A

解決済

1回答

399閲覧

Pandasでのデータ処理で対応する文字を結合させたい。

oobutamaru

総合スコア32

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

pandas

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

0グッド

0クリップ

投稿2022/05/11 06:49

前提

python pandasでのデータ処理をしています。
まったく手も足もだせないので、
ご教示よろしくお願いいたします。

イメージ説明
左3列は、実測データ
左4~8列は、特記事項データというデータがあります。
実測データ、特記事項データの列数は、ランダムです。
左3列にはランダムな文字がはいっています。(画像は一文字ですが、実際は、長い文字列です)
4列目からは、※印がはいった文字があり、同じ行の左3列と対応しています。
1行目のQ※1は テスト
2行目のJ※1は あかlsjfl
という具合に入っています。
また、3列目は、※1、※2、※3が左にはなくて、※4があります。

実現したいこと

左3列に※印の文言を入れたいです。
理想となるデータは、下記です。
イメージ説明
※数字部分を取り除き、それぞれの行に対応する特記事項を結合したいです。

まったくやり方がわかりませんので、ご教示よろしくお願いいたします。

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

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

python

1import pandas as pd 2import io 3 4pd.set_option('display.unicode.east_asian_width', True) 5 6csv_data = ''' 7Q※1,B,K,※1:a,,,, 8Z,J※1,U,※1:b,,,, 9L,S,Z※4,※1:c,※2:d,※3:e,※4:f, 10G※1,N※2,Y※3,※1:g,※2:h,※3:i,, 11D,Z,G,,,,, 12K※1,V,O,※1:j,,,, 13Y,X※1,Y,※1:k,,,, 14X,I※1,S※2,※1:l,※2:m,,, 15''' 16df = pd.read_csv(io.StringIO(csv_data), header=None).fillna('') 17print(df.to_markdown(index=False)) 18 19# 20df.iloc[:, :3] = ( 21 df.apply(lambda x: 22 x[:3].replace( 23 {i[0]: ':'+i[1] for i in x[3:].str.split(':') if len(i)==2}, 24 regex=True), axis=1)) 25 26print(df.to_markdown(index=False))

置換前

01234567
Q※1BK※1:a
ZJ※1U※1:b
LSZ※4※1:c※2:d※3:e※4:f
G※1N※2Y※3※1:g※2:h※3:i
DZG
K※1VO※1:j
YX※1Y※1:k
XI※1S※2※1:l※2:m

置換後

01234567
Q:aBK※1:a
ZJ:bU※1:b
LSZ:f※1:c※2:d※3:e※4:f
G:gN:hY:i※1:g※2:h※3:i
DZG
K:jVO※1:j
YX:kY※1:k
XI:lS:m※1:l※2:m

投稿2022/05/11 08:24

編集2022/05/11 08:41
melian

総合スコア19805

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

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

oobutamaru

2022/05/12 00:43

回答ありがとうございます。 お手数でもうしわけないのですが、if len(i)==2はどういう処理なのでしょうか? ご教示お願いします。
melian

2022/05/12 00:49

例えば 1行目は4~7列目が空(カラ)なので、split(':') を実行すると結果が [''] となってしまい、後の処理でエラーになってしまします。"※1:a" の場合は ["※1", "a"] という長さ2のリストになるので、これだけを抽出するために if len(i)==2 を付けています。
oobutamaru

2022/05/12 04:50

回答ありがとうございます。 出来ました。色々教えて頂き、本当にありがとうございます。 助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問