Pandas reports TypeError: 'Series' object are mutable, thus they cannot be hashed.
I. 必要条件
元のCSVファイルのA列の値を元に、B列を追加する。
II. トライ1
1. A列をキー、B列を値とする辞書dictに、A列とB列に対応する値を書き込め。
2. CSVファイルを次のように処理します。 データフレーム .
3.
import pandas as pd # If df['A'] exists in dict_a, then take value, value, otherwise use default value 15 dict_a = {'a':1,'b':1,'c':2,'d':4,'d':3} df = pd.read_csv(example.csv) df['B'] = dict_a[df['A']] # The previous sentence reports an error: TypeError: 'Series' objects are mutable, thus they cannot be hashed
を使用する場合 パンダ ファイルを処理する際に、エラーが報告されます。TypeError: 'Series' objects are mutable, thus they cannot be hashed, means that df['B'] as whole is a Series, which is mutable, and thus cannot be retrieve and assign as an index.これは、df['B']が全体としてSeriesであり、mutableであり、インデックスとして取得することができないことを意味します。
III. トライ2
forループを使って、DataFrameの各行を以下のコードで反復処理します。
data = pd.read_csv('example.csv') df = pd.DataFrame(data) df['B'] = 15 # Set the default value to 15 # iterrows traverses each row of the DataFrame for index, row in df.iterrows(): if row['A'] in dict_a: print(row['B']) row['B'] = dict_a[row['A']] print(row['B']) else: row['B'] = 15 df.to_csv('finished.csv')
印刷結果は、割り当てがうまくいったことを示しますが、結果のファイルは変更されていません。
その理由は、iterrowsは行を修正してはならず、反復処理されているものを修正してはならないからです。これは、すべてのケースで動作することを保証するものではありません。データ型によっては、イテレータはビューではなくコピーを返しますので、それに対する書き込みはうまくいきません。
IV. ソリューション
最後に、ラムダ関数と
df.apply() function
を使用して、行をたどり、複数の列にアクセスする関数です。
コードはこのようになります。
# Note that the formula() function must have a return value, otherwise the following apply function will not work def formula(x): if x in slidetime_dict: return slidetime_dict[x] else: return 15 df['slidetime'] = df.apply(lambda row: formula(row['A']), axis=1)
上記、問題解決。
---------- ---------- ---------- ---------- ---------- --
追加知識の更新。
pandas が apply() 関数を使うとき、呼び出された関数 (この場合は formula()) の様々な条件分岐は戻り値を持たなければならず、そうでなければ生成された結果は不正確です。
関連
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み] テスト
-
表示名がない、$DISPLAY環境変数がない、というエラーを報告する
-
[解決済み] ImportError: matplotlib は dateutil を必要とします。
-
[解決済み] AttributeErrorを受信しています。WITH オブジェクトに EXIT が定義されていても __exit__ を受け取る
-
[解決済み] python で scipy.spatial.distance.cdist(X, Y) を使用して点群間の距離を求める。
-
[解決済み] Jupyter Notebook - 関数内のプロット - 図がプロットされない [重複].
-
[解決済み] モデル実行後にTensorflow GPUのメモリをクリアする
-
[解決済み] MACでpipを使おうとするとパーミッションが拒否される?
-
[解決済み] ユーザー登録でエラー:そのようなテーブルがない:auth_user
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】DataFrame.locで「Too many indexers」。
-
[解決済み] TKinterのボタンの無効化/有効化
-
[解決済み] pip の `--no-cache-dir` は何のためにあるのですか?
-
[解決済み] ユニットテストのassertRaises()をNoneTypeオブジェクトで適切に使用するには?[重複]する
-
[解決済み] statsmodel AttributeError: モジュール 'scipy.stats' には 'chisqprob' という属性がありません。
-
[解決済み] フラスコでPythonマルチプロセッシング
-
[解決済み] Tensorflowのtf.contribモジュールは何のためにあるのですか?
-
[解決済み] "No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み] Pythonでガンマ関数
-
ModuleNotFoundError: flask'という名前のモジュールがありません どうしたらよいですか?