Mam listę dict1.keys (), które wyliczam powyżej i chciałbym użyć elementu jako łańcucha.

for i,j in enumerate(dict1.keys()): str(j) = somethingElse
>>> SyntaxError: can't assign to function call

https://dbader.org/blog/python-enumerate opisuje wyliczone encje jako krotkę of: (indeks, element). type(j) to <class 'str'>, które mogę wydrukować, ale nie używam go jako zmiennej.

EDYTOWAĆ:

for i,j in enumerate(dict1.keys()): j = somethingElse

EDIT2: Myślę, że problem może dotyczyć pand. Pierwsza linia działa, a nie druga.

for i,j in enumerate(dict1.keys()): list1.append(j)
for i,k in enumerate(list1): k = pd.DataFrame(dict1[k]['Values'])

EDIT3: Ta druga linia działa, ale tylko dla kończy się tylko jednym df, z nazwą 'k' zamiast klucza. Ale oto, o co mi chodzi. Każdy dykt został przekonwertowany na plik df przy użyciu jego nazwy klucza:

for i,j in enumerate(dict1.keys()): j = pd.DataFrame(dict1[j]['Values'])

EDIT4: Zgodnie z poniższymi komentarzami przełączyłem się na pętlę for na klawiszach (których nie trzeba jawnie wywoływać), ale nadal nie użyję elementu „i” jako zmiennej. Jednak z pytania połączonego poniżej, elementy mogą być używane jako klucz w dyktandzie. Po zredukowaniu pytania do „użyj elementu listy jako nazwy dla ramki danych” i wyszukaniu tego, wraca. Jako odpowiedź napiszę również:

dict2={}
for i in dict1: dict2[i] = pd.DataFrame(dict1[i]['Values'])

... dlatego nazwy są zachowane. Właściwie jest to podobne do odpowiedzi Sheri z listami, ale nazwy zachowują skojarzenie z dfs. Może nie być sposobu na ustawienie wartości zmiennej za pomocą czegoś innego niż zwykły ciąg, ale zacznę inny pytanie do tego.

używać elementów z listy jako nazw ramek danych

0
alchemy 2 kwiecień 2020, 20:10

4 odpowiedzi

Najlepsza odpowiedź

Ponieważ generujesz ramkę danych pandy dynamicznie wewnątrz pętli for, więc na końcu podczas drukowania j pokaże Ci ostatnią wygenerowaną ramkę danych. Powinieneś przechowywać swoją ramkę danych na liście Spróbuj użyć tego:

listOfFrame = [] 
for j in dict.keys(): 
    j = pd.DataFrame(dict[j]['Values'])
    listOfFrame.append(j)
1
Sheri 2 kwiecień 2020, 18:12

Rzeczywiście j będzie str (lub jakimkolwiek innym rodzajem klucza, którego używasz w dict).

Rzeczywisty problem dotyczy treści pętli, ponieważ komunikat o błędzie stwierdza:

str(j) = somethingElse

Nie jest poprawnym Pythonem. Lewa strona to wywołanie funkcji str, więc nie możesz przypisać jej wartości.

0
Thomas 2 kwiecień 2020, 17:14

Na podstawie komentarzy, których nie chcesz enumerate ani iterować po klawiszach dyktowania. Zamiast tego chcesz iterować po jego wartościach :

dfs = []
for val in dict1.values():
    dfs.append(pd.DataFrame(val['Values']))

Jednak normalnie byłoby to napisane bez jawnej pętli w Pythonie, na przykład przy użyciu rozumienie listy:

dfs = [pd.DataFrame(val['Values']) for val in dict1.values()]
0
Konrad Rudolph 2 kwiecień 2020, 18:16

Z pytania połączonego poniżej, elementy mogą być używane jako klucz w dyktandzie. Po zredukowaniu pytania do „użyj elementu listy jako nazwy dla ramki danych” i wyszukaniu tego, wraca. Jako odpowiedź napiszę również:

dict2={}
for i in dict1: dict2[i] = pd.DataFrame(dict1[i]['Values'])

... dlatego nazwy są zachowane. Właściwie jest to podobne do odpowiedzi Sheri z listami, ale nazwy zachowują skojarzenie z dfs. Może nie być sposobu na ustawienie wartości zmiennej za pomocą czegoś innego niż zwykły ciąg, ale zacznę inny pytanie do tego.

używać elementów z listy jako nazw ramek danych

0
alchemy 2 kwiecień 2020, 22:50