私はしばらくの間これを試しています。ここに問題があります:他のデータフレームを使用してデータフレーム内の値をPandasのキーとして文字列で置き換えます
私はCSVファイルにあるテキストに関するいくつかのメタデータを使って作業しています。
実際のテーブルにはより長く、より複雑ですが、それは同じロジックを次のとおりです:それはこのようになりますすべての行がテキストであり、すべての列は、テキストのさまざまな側面です。私はいくつかの列に多くのバリエーションを持っており、より簡単なものに改造したいと思っています。例えば、物語の観点から、ホモジエイテッドとオートジージェティックの値を非ヘテロジージェティックなものに変更する。
あなたが見ることができるように、メタデータのすべての列は、古い値が新しいモデル-キーワードの行を次のようになります。私はこのようになりますキーワードと呼ばれる別のCSVファイルでこの新しいモデルを定義します新しい値はnew_model列にあります。
この値をマップするか、Pandasを使用して置き換える必要があります。
import re
import pandas as pd
df_metadata = pd.read_csv("/metadata.csv", encoding="utf-8", sep=",")
df_keywords = pd.read_csv("/keywords.csv", encoding="utf-8", sep="\t")
for column_metadata,value_metadata in df_metadata.iteritems():
if str(column_metadata) in list(df_keywords.loc[:,"term_type"]):
df_metadata.loc[df_metadata[column_metadata] == value_metadata, column_metadata] = df_keywords.loc[df_keywords["term_value"] == value_metadata, ["new_model"]]
とPythonは必ず戻って、このエラーを与える:
"ValueError: Series lengths must match to compare"
私は問題はLOCと交換の第二部のvalue_metadataであると思うが、私はこれは私が今のところ持っているものですここでの意味:
df_keywords.loc[df_keywords["term_value"] == value_metadata, ["new_model"]]
をvalue_metadataは、このコマンドの最初の部分で動作しますが、それは二番目にない理由私は理解していないものがある...
お願いします。よろしくお願いいたします。たぶん、データフレームを繰り返すより簡単な方法があるかもしれません...私は非常に提案に開放されています。敬具、 ホセ・
多くのありがとうございます! :) できます!両方のファイルの入力に依存するようにリモデリングするメタデータのリストを作成する最も良い方法として、あなたは何を提案しますか?今、私はこの3つのコラムを持っているので、明日私は20を持っているかもしれません...私はそれを行いますが、より良い方法を持っていると確信しています: ' list_ = []; df_metadata.columns.valuesでCOLUMN_NAMEため : STR場合、リスト中の(COLUMN_NAME)(df_keywords.loc [:、 "TERM_TYPE"]): list_.append(COLUMN_NAME)。 print(list_); ' 私はコメントのコードが素敵なレンダリングに作るために得ることはありません:(申し訳ありません! –
私が最も簡単だと思う[' drop_duplicates'](http://pandas.pydata.org/pandas-docs/stable/生成/ pandas.Series.drop_duplicates.html) - 。 'プリント(df_keywords.term_type.drop_duplicates()ToListメソッド())' – jezrael
多くの多くのおかげで良い一日を! –