Kiedy próbuję użyć numpy.array (strukturalnej tablicy numpy), wiem, że mogę wyciągnąć kolumnę, wykonując coś w rodzaju array ["col"]. Z mojego zrozumienia wynika to z numpy.dtype.names i natury uporządkowanych tablic. Jednak podczas przekazywania wspomnianej tablicy do funkcji nie otrzymuję nazwy kolumny, gdy używam numpy.dtype.name, otrzymuję coś w rodzaju „strxxx”. Jeśli warto wiedzieć, ta konkretna tablica została utworzona za pomocą numpy.genfromtxt () i pliku csv. Na przykład poniższy kod

def empty_check(param):
for ind in param:
    # Ignore future warning for comparison just for this instance
    with warnings.catch_warnings():
        warnings.simplefilter(action='ignore', category=FutureWarning)
        if ind == '':
            print("Please fill out required data in", param.dtype.name, "column")

Prowadzi do:

Please fill out required data in str544 column

Czy ktoś miałby pomysł, dlaczego zamiast nazwy kolumny pojawia się str544?

Konfiguracja Python 3.7.0 numpy 1.15.4 IDE: PyCharm 2018.3

2
Christian Zapata 6 grudzień 2018, 22:35

1 odpowiedź

Najlepsza odpowiedź

Popełniasz tutaj mały błąd. Zakładasz, że dtype.name i dtype.names zwracają to samo. Oni nie.

Z dokumentów

name Nazwa szerokości bitowej dla tego typu danych.

names Uporządkowana lista nazw pól lub Brak, jeśli nie ma pól.


Widzisz więc nazwę szerokości bitowej typu danych pola. Jeśli jednak zadzwonisz dtype.names, otrzymasz zwrot None, ponieważ przekazane pojedyncze pole nie ma żadnych pól do zwrócenia.


O ile mi wiadomo, nie ma sposobu na wywnioskowanie nazwy pola bez dostępu do tablicy strukturalnej, która je zawiera. Najprawdopodobniej będziesz musiał przekazać nazwę pola jako parametr do funkcji empty_check.

2
Community 20 czerwiec 2020, 12:12