/ / Pandas ExcelFile.parse () odczyt pliku jako dict zamiast dataframe - python, excel, python-3.x, pandy

Pandas ExcelFile.parse () czyta plik jako dict zamiast ramek danych - python, excel, python-3.x, pandy

Jestem nowy w pytonie, a jeszcze nowszy w pandach, alestosunkowo dobrze zorientowany w R. Używam Anacondy z Pythonem 3.5 i pandami 0.18.1. Próbuję odczytać plik Excel jako ramkę danych. Plik wprawdzie jest całkiem ... brzydki. Jest dużo pustej przestrzeni, brakujące nagłówki itp. (Nie jestem pewien, czy to jest źródłem jakichkolwiek problemów)

Tworzę obiekt pliku, a następnie znajduję odpowiedni arkusz, a następnie próbuję odczytać ten arkusz jako ramkę danych:

xl = pd.ExcelFile(allFiles[i])
sName = [s for s in xl.sheet_names if "security exposure" in s.lower()]
df = xl.parse(sName)
df

Wyniki:

{"Security exposure - 21 day lag":          Percent of Total Holdings  
0      KMNFC vs. 3 Month LIBOR AUD
1                        04-OCT-16
2                Australian Dollar
3                              NaN
4                              NaN
5                              NaN
6                              NaN
7                              NaN
8          Long/Short Net Exposure
9                            Total
10                             NaN
11                            Long
12                             NaN
13                             NaN
14                             NaN
15                             NaN
16                             NaN
17                             NaN

(Trwa to dla 20-30 kolejnych wierszy i 5-6 kolejnych kolumn)

Korzystam z Anacondy i Spydera, który ma „Variable Explorer”. Pokazuje zmienną df jako dyktę typu DataFrame:

wprowadź opis obrazu tutaj

Nie mogę jednak użyć iloc:

df.iloc[:,1]

Traceback (most recent call last):

File "<ipython-input-77-d7b3e16ccc56>", line 1, in <module>
df.iloc[:,1]

AttributeError: "dict" object has no attribute "iloc"

jakieś pomysły? czego mi brakuje?

EDYTOWAĆ:

Żeby było jasne, naprawdę próbuję to zrobićodwołać się do pierwszej kolumny df. W R byłoby to df [, 1]. Rozglądanie się po nim wydaje się nie być zbyt popularnym sposobem na robienie rzeczy, a nie „poprawnym” sposobem. Rozumiem, dlaczego indeksowanie według nazw kolumn lub kluczy jest lepsze, ale w tej sytuacji po prostu muszę indeksować ramki danych według numerów kolumn. Jakakolwiek działająca metoda robienia tego byłaby bardzo mile widziana.

EDYCJA (2):

Zgodnie z sugestią spróbowałem „read_excel” z tymi samymi wynikami:

df = pd.ExcelFile(allFiles[i]).parse(sName)
df.loc[1]
Traceback (most recent call last):

File "<ipython-input-90-fc40aa59bd20>", line 2, in <module>
df.loc[1]

AttributeError: "dict" object has no attribute "loc"


df = pd.read_excel(allFiles[i], sheetname = sName)
df.loc[1]
Traceback (most recent call last):

File "<ipython-input-91-72b8405c6c42>", line 2, in <module>
df.loc[1]

AttributeError: "dict" object has no attribute "loc"

Odpowiedzi:

1 dla odpowiedzi № 1

Problem był tutaj:

sName = [s for s in xl.sheet_names if "security exposure" in s.lower()]

który zwrócił listę pojedynczego elementu. Zmieniłem to na następujące:

sName = [s for s in xl.sheet_names if "security exposure" in s.lower()][0]

który zwraca ciąg znaków, a następnie kod działa zgodnie z oczekiwaniami.

Wszystko dzięki ayhan za wskazanie tego.