J'ai une grande matrice (15000 lignes x 2500 colonnes) stockée à l'aide de PyTables et de voir comment itérer sur les colonnes d'une rangée. Dans le documentation je vois seulement comment accéder à chaque rangée par son nom manuellement.Comment itérer sur les noms de colonnes avec PyTable?
J'ai des colonnes comme:
- ID
- X20160730_Day10_123a_2
- X20160730_Day10_123b_1
- X20160730_Day10_123b_2
La valeur de la colonne ID est une chaîne comme '10692.RFX7', mais tous les autres les valeurs de cellule sont des flottants. Ce travaux de sélection et je peux parcourir les lignes de résultats, mais je ne peux pas voir comment parcourir les colonnes et vérifier leurs valeurs:
from tables import *
import numpy
def main():
h5file = open_file('carlo_seth.h5', mode='r', title='Three-file test')
table = h5file.root.expression.readout
condition = '(ID == b"10692.RFX7")'
for row in table.where(condition):
print(row['ID'].decode())
for col in row.fetch_all_fields():
print("{0}\t{1}".format(col, row[col]))
h5file.close()
if __name__ == '__main__':
main()
Si je viens itérer rien « pour col dans la ligne » arrive. Comme le code est au-dessus, je reçois une pile:
10692.RFX7
Traceback (most recent call last):
File "tables/tableextension.pyx", line 1497, in tables.tableextension.Row.__getitem__ (tables/tableextension.c:17226)
KeyError: b'10692.RFX7'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "tables/tableextension.pyx", line 126, in tables.tableextension.get_nested_field_cache (tables/tableextension.c:2532)
KeyError: b'10692.RFX7'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "./read_carlo_pytable.py", line 31, in <module>
main()
File "./read_carlo_pytable.py", line 25, in main
print("{0}\t{1}".format(col, row[col]))
File "tables/tableextension.pyx", line 1501, in tables.tableextension.Row.__getitem__ (tables/tableextension.c:17286)
File "tables/tableextension.pyx", line 133, in tables.tableextension.get_nested_field_cache (tables/tableextension.c:2651)
File "tables/utilsextension.pyx", line 927, in tables.utilsextension.get_nested_field (tables/utilsextension.c:8707)
AttributeError: 'numpy.bytes_' object has no attribute 'encode'
Closing remaining open files:carlo_seth.h5...done
Oui, cette partie était facile. Mais j'ai des milliers de colonnes et je veux parcourir pour vérifier leurs valeurs et imprimer sélectivement les noms des colonnes et leurs valeurs si elles se situent dans une certaine fourchette. L'accès par leur nom manuellement n'aide pas. – Jorvis
Merci! Après votre modification, je vois que vous avez ajouté l'itération. J'étais bloqué en pensant que vous pouviez y accéder à partir de la ligne sélectionnée. Cela marche. – Jorvis