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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

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

pandas

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

Q&A

解決済

2回答

2503閲覧

データフレームの中の要素を違うものに書き換えたい

bebetakumi

総合スコア1

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

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

pandas

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

0グッド

0クリップ

投稿2021/06/04 08:30

前提・実現したいこと

pandas で取得したデータの要素を置換したい

ここに質問の内容を詳しく書いてください。
pandas で取得したデータの要素の一部をNANに置換したいです。
置換したい要素は、特定の文字ではなく、頭文字が特定の文字、例えば頭文字が「A」であるような要素をすべてNANに置換したいです。

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

最初の文字が「K」から始まる要素を置換したく、str.containsを用いて一文字目を取り出し、その文字が「K」であれば元の要素をNANにreplaceで置換することを試みましたが、できませんでした。
エラーメッセージは以下の通りです。
Series.replace cannot use dict-like to_replace and non-None value

該当のソースコード

import pandas
import numpuy as np
path = pd.read_csv("ファイル名",nrow = 100) #ビッグデータなので100列目までで試しています。
path_1 = path["path1"]
path_1_head = path_1.str.contains("A")
for i in range(100):
if path_1_head[i] == True:
path_1[i:i+1].replace(path_1[i:i+1], np.nan)

Python

1ソースコード

試したこと

頭文字を抽出して、それが「A」であればそれに対応するpath_1の要素を書き換えたいのですが、うまい方法が分かりませんでした。

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

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

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

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

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

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

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

guest

回答2

0

ベストアンサー

ブーリアンインデックスを用いて代入操作を行うことにより、任意の条件に一致した値を置換することができます。

以下は、データフレームの'a'列について、'o'からはじまる値をNAに置換する例です。

python

1In [11]: df = pd.DataFrame({'a': ['one', 'one', 'two', 2 : 'three', 'two', 'one', 'six'], 3 : 'c': np.arange(7)}) 4 : df 5Out[11]: 6 a c 70 one 0 81 one 1 92 two 2 103 three 3 114 two 4 125 one 5 136 six 6 14 15In [12]: df.loc[df['a'].str.startswith('o'), 'a'] = pd.NA 16 17In [13]: df 18Out[13]: 19 a c 200 <NA> 0 211 <NA> 1 222 two 2 233 three 3 244 two 4 255 <NA> 5 266 six 6

投稿2021/06/05 06:53

kirara0048

総合スコア1399

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

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

0

あまり変更しないのであれば、こういう感じです。

python

1>>> import pandas 2>>> import numpy as np 3>>> path = pd.DataFrame({'A':[1,2,3,4], 'path1': ['Abc', 'aBc', 'zzA', 'abZ']}) 4>>> path_1 = path["path1"] 5>>> path_1_head = path_1.str.startswith("A") 6>>> for i in range(4): 7... if path_1_head[i] == True: 8... path.loc[i, 'path1'] = np.nan 9... 10>>> print(path) 11 A path1 120 1 NaN 131 2 aBc 142 3 zzA 153 4 abZ

applyを使うとこうです。

python

1>>> import pandas 2>>> import numpy as np 3>>> path = pd.DataFrame({'A':[1,2,3,4], 'path1': ['Abc', 'aBc', 'zzA', 'abZ']}) 4>>> path['path1'] = path['path1'].apply(lambda x: x if x[0] != 'A' else np.nan) 5>>> print(path) 6 A path1 70 1 NaN 81 2 aBc 92 3 zzA 103 4 abZ

投稿2021/06/04 09:03

編集2021/06/04 09:07
ppaul

総合スコア24666

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問