0
次のプログラムでは、3つの列を持つマルチインデックスデータフレームを作成し、最終的に列の1組にリストのタプルリストを入れました。私はインデックスを平らにして、行全体を反復しようとしましたix, rec = next(df.iterrows())
。 その後、反復行(rec
)からデータ列rec.data
を参照解除し、メモリオブジェクト<memory at 0x000000000D6E0AC8>
であることがわかりました。レコードrec.data.obj
にあるobjを呼び出すと、行全体の内容を持つ配列であることが分かりました。実際のコンテンツに到達するには、直感的ではないアイテムインデックスを取得する必要があります。データフレーム列の行への再帰的参照
>>> print(rec.data.obj[2])
[(['9', '"', 'X', '12', '"'], 0.9993008259451988)]
サンプル作り直し例
def foo():
return [(['9', '"', 'X', '12', '"'], 0.99930082594519876)]
import pandas as pd
def spam():
index = pd.MultiIndex(levels=[[], []],
labels=[[], []],
names=[u'timestamp', u'key'])
columns = ['data', 'col1', 'col2']
df = pd.DataFrame(index=index, columns=columns)
for ix in range(4):
key = ('XXX', ix)
df.loc[key, 'data'] = str(foo())
df.loc[key, 'col1'] = "col1_{}".format(ix)
df.loc[key, 'col2'] = "col2_{}".format(ix)
df.reset_index(inplace=True)
return df
def bar():
df = spam()
ix, rec = next(df.iterrows())
print(rec.data)
print(rec.data.obj)
print(rec.data.obj[2])
bar()
出力
<memory at 0x000000000D6E0AC8>
['XXX' 0 '[([\'9\', \'"\', \'X\', \'12\', \'"\'], 0.9993008259451988)]'
'col1_0' 'col2_0']
[(['9', '"', 'X', '12', '"'], 0.9993008259451988)]
私は無知だと理解することができない、私は
ありがとうございます。 'iterrows'を使っていた理由は、' itertuples'の上に列挙型を避けたかったからです。いずれにしても、なぜ私のコードが失敗していたのか? – Abhijit
いいえ、私は考えがあります。おそらくiteratorのために 'print(rec.Index)' – jezrael