クロスリファレンスを含むCSVファイルがあります。つまり、行にラベルが付けられ、列にラベルが付けられ、セルには両方が適用される「X」が含まれます(色と味私たちはお菓子の話をしている場合は、その一つのファイルには、お菓子の特定の一種であり、赤いものは、それが意味するだろう、などイチゴ、リンゴのような緑色のもののような味):特定の値を持つセルの列と行のラベルを取得する
Candy Q red green blue apple X strawberry X smurf X dunno lol X X X
私はパンダのデータフレームにそれらをロードすることができ、それらを読み取って繰り返しますが、Xを含むセルの記述子を取得することはできませんでした。 パンダが提供する3つの異なるイテレータを試しましたが、取得する必要はありませんでした。私はイテレータを使用して、index-based value-checking
のインクリメントを試しましたが、かなり混乱してしまい、それを破棄しました。
出力は、{apple: green},{strawberry: red}, {smurf: blue},{dunno lol: [red, green, blue]}
が理想的です。
どうすればこれらを得ることができますか?references
?
編集:追加する必要がある可能性があります:列や行の名前が一様ではないため、特定のロジックに従いますが、一般的に厳密なスキーマは定義できません。
更新#2:coldspeedとスコット・ボストン(プラス小さな修正)の組み合わせのソリューションごとのようにコード、:
files = glob.glob(mappings_path + '\\*.csv')
# iterate over the list getting each file
for file in files:
# open each file
with open(file,'r') as f:
# read content into pandas dataframe
df = pd.read_csv(f, delimiter=";", encoding='utf-8')
# set index to first column (and only column)
df = df.set_index(df.iloc[:, 0])
d = defaultdict(list)
for x, y in zip(*np.where(df.notnull())):
d[df.index[x]].append(df.columns[y])
res = dict(d)
for k, v in res.items():
del v[0]
logger.info(res)
記述の問題を修復し(例ではCandy Q
)が最初に上げすべての結果リストで: {'apple': ['Candy Q','green'], 'strawberry': ['Candy Q','red']
など。 Here's a link to the CSV files in case you need them or want to know what this is about、またはthe fourth download on this pageあなたがインターネット上のどこかに投稿者のリンクを信頼しない場合は、
ありがとうございました。
あなたの現在のコードを表示 – RomanPerekhrest
@RomanPerekhrest私はいくつかの可能性を見抜いて、それらが動作しない(または価値のあるものを作り出した)ものを捨てました。私は現在ファイルをロードしてiteritemsの結果を記録しています。振り出しに戻って。 – cmm