0
請考慮以下程序,其中,我創建了包含三列的多索引數據框,並最終使用列表元組的列表的嵌套列表填充了一列。我把這些索引弄平了,並試着迭代行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'調用enumerate。無論如何,任何想法爲什麼我的代碼失敗? – Abhijit
不,我有想法。也許對於迭代器可能使用'print(rec.Index)' – jezrael