パンダエラーTypeError: 'Series'オブジェクトは変更可能であるため、ハッシュできません



Pandas Error Typeerror



まず、需要

元のCSVファイルの値に応じた列。Bが追加されます。

次に、1を試してください

1.値に対応する列Aと行Bが辞書dictに書き込まれ、Aがキー、Bが値として書き込まれます。



2.CSVファイルの処理はDataFrameです。

3.3。



import pandas as pd # If df [ 'A'] is present in dict_a, then take the value, the value, or the default value of 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']] # Sentence on error: TypeError: 'Series' objects are mutable, thus they can not be hashed

パンダ処理ファイルエラーを使用する場合:TypeError: 'Series'オブジェクトは変更可能であるため、ハッシュできません。つまり、df ['B']全体がシリーズであり、変更が容易であるため、として取得できません。インデックスと割り当て。

第三に、2を試してください

次のように、forループを使用して、各行のDataFrameを走査します。

data = pd.read_csv('example.csv') df = pd.DataFrame(data) df [ 'B'] = 15 # 15 to set the default value # Iterrows each line traversing 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行を変更しないでください。反復中に変更しないでください。これがすべての場合に機能することを保証することはできません。リターンのタイプに関するデータ、ビューのイテレータではなくコピー、書き込みは機能しません。

第四に、解決策

そして、ラムダ関数を最終的に使用しますdf.apply () function行と列を介して複数の関数にアクセスします。

コードは次のように表示されます。

# Note that the function formula () must have a return value, otherwise the following apply function does 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)

上記で、問題は解決されました。