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

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

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

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

pandas

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

Q&A

解決済

2回答

437閲覧

Pandasを使った集計処理

kuma_129

総合スコア19

Python

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

pandas

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

0グッド

0クリップ

投稿2020/11/05 14:08

初歩的な質問ですみませんが、お力添えいただけますと幸いです。
Pandasを使用して、添付写真のようなダウンロードしてきたCSVファイルの集計処理をしています。
黄色に色付けしたところには、数値の後ろに括弧で「数値+X」の表記があるため、氏名ごとに平均や合計のgroupbyメソッドが使用できません。
replace関数でNanに変換して扱うと、括弧前の集計したい数値までNanに変換されたので、括弧内の値を無視する条件文でいい方法が考えつかずに質問致しました。

ご教示いただけますと助かります。イメージ説明

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

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

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

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

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

guest

回答2

0

dataframe内のデータの文字列をapplyで修正する方法についてはこんなのでどうでしょう。

python

1df["年度H1cm合計"] = df["年度H1cm合計"].apply(lambda x: re.sub(r"(.+)", "", x))

これで、「(~)」の部分は削除できるはずです。
また、このままでは文字列のままですので、同時に数値に変換するのであれば、

python

1df["年度H1cm合計"] = df["年度H1cm合計"].apply(lambda x: int(re.sub(r"(.+)", "", x)))

のように、intをつければいいと思います。

また、画像を見ると、カッコが全角になっているようにも見えるので、その場合は対応する式の中のカッコも全角のものを指定しなければなりません。

投稿2020/11/08 08:49

TakaiY

総合スコア12804

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

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

0

ベストアンサー

replaceではなく、applyで「(~)」の部分を削除する関数を適用するのがいいでしょう。 同時にintに変換すれば処理が一度に済みますね。

自分なら、削除には、re.sub() を使います。

投稿2020/11/05 15:12

TakaiY

総合スコア12804

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

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

kuma_129

2020/11/08 06:07

TakaiY様 ご回答ありがとうございました。 ご指摘の通りにre.sub()を使用してみましたが、エラーになり、うまくいきませんでした。 書き方が間違っているのだと思いますが、いろいろ試してみても何も変化が起きないか、エラー文の繰り返しでした。 もし良ければ誤っている箇所をご指摘いただけますと幸いです。 df["年度H1cm合計"] = df["年度H1cm合計"].re.sub("(.+?)", "") df
TakaiY

2020/11/08 07:32

何も変化が起きないコードと、エラーが出るコードはそれぞれどんなものですか? エラーはどのようなエラーですか?
kuma_129

2020/11/10 13:25

なんどもご回答ありがとうございます。 ご教示していただいた方法で試してみましたところ、 expected string or bytes-like object というエラーが出現しました。 また、()内の削除を試みたところ、 df.fillna(value={'年度H1cm合計':0.0},inplace=True) df.head() という表記で消すことはできたのですが、書き換えられたわけではないのか、その後にデータフレームの全体表示でやはり最初の状態のままでした。 なかなか自力でいい解決方法がみつけられずいろいろ質問してしまいすみません???? ()の表記が全角に見える件ですが、「(」と数字の間に半角スペースが入っておりました!自分でも気付きませんでした、ありがとうございます。
TakaiY

2020/11/10 13:46

エラーメッセージだけでは何もわかりません。エラーメッセージだけでなく、その前にあるスタックトレースも含めて提示してください。 また、ここまできたら、状況だけでは進みません。現在のコードを提示してください。 回答は、ここに書くのでなく、質問を編集するか追記して下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問