Mam plik csv bez nagłówka z indeksem DateTime. Chcę zmienić nazwę indeksu i kolumny, ale za pomocą df.rename () zmienia się tylko nazwa kolumny. Pluskwa? Jestem na wersji 0.12.0
In [2]: df = pd.read_csv(r'D:\Data\DataTimeSeries_csv//seriesSM.csv', header=None, parse_dates=[[0]], index_col=[0] )
In [3]: df.head()
Out[3]:
1
0
2002-06-18 0.112000
2002-06-22 0.190333
2002-06-26 0.134000
2002-06-30 0.093000
2002-07-04 0.098667
In [4]: df.rename(index={0:'Date'}, columns={1:'SM'}, inplace=True)
In [5]: df.head()
Out[5]:
SM
0
2002-06-18 0.112000
2002-06-22 0.190333
2002-06-26 0.134000
2002-06-30 0.093000
2002-07-04 0.098667
rename_axis
metody.df.rename_axis("Date", axis='index', inplace=True)
zgodne z dokumentacją pandas.pydata.org/pandas-docs/stable/generated/… lubdf.index.names = ['Date']
Odpowiedzi:
rename
Metoda bierze słownika dla indeksu, która ma zastosowanie do indeksu wartości .Chcesz zmienić nazwę na nazwę poziomu indeksu:
Dobrym sposobem na zastanowienie się nad tym jest to, że kolumny i indeks są tego samego typu obiektów (
Index
lubMultiIndex
) i można je zamienić za pomocą transpozycji.Jest to trochę mylące, ponieważ nazwy indeksów mają podobne znaczenie do kolumn, więc oto więcej przykładów:
Możesz zobaczyć zmianę nazwy w indeksie, która może zmienić wartość 1:
Podczas zmiany nazw poziomów:
Uwaga: ten atrybut jest tylko listą i możesz zmienić nazwę jako listę / mapę.
źródło
"inplace =True"
,df1.rename
nie byłoby naprawdę coś zmienić.Aktualnie wybrana odpowiedź nie wspomina o
rename_axis
metodzie, za pomocą której można zmienić nazwę poziomu indeksu i kolumn.Pandy mają pewne dziwactwa, jeśli chodzi o zmianę nazwy poziomów indeksu. Dostępna jest również nowa metoda DataFrame
rename_axis
do zmiany nazw poziomów indeksu.Przyjrzyjmy się ramce DataFrame
Ta ramka DataFrame ma jeden poziom dla każdego z indeksów wierszy i kolumn. Indeks wiersza i kolumny nie ma nazwy. Zmieńmy nazwę poziomu indeksu wiersza na „nazwy”.
rename_axis
Metoda ma również możliwość zmiany nazwy poziom kolumna zmieniającaxis
parametr:Jeśli ustawisz indeks z niektórymi kolumnami, nazwa kolumny stanie się nową nazwą poziomu indeksu. Dodajmy do poziomów indeksowania naszej oryginalnej ramki DataFrame:
Zwróć uwagę, że oryginalny indeks nie ma nazwy. Nadal możemy użyć,
rename_axis
ale musimy przekazać jej listę o takiej samej długości, jak liczba poziomów indeksu.Możesz użyć,
None
aby skutecznie usunąć nazwy poziomów indeksu.Serie działają podobnie, ale z pewnymi różnicami
Utwórzmy serię z trzema poziomami indeksu
Możemy użyć
rename_axis
podobnie, jak zrobiliśmy z DataFramesZwróć uwagę, że pod nazwą Series znajduje się dodatkowy fragment metadanych
Name
. Podczas tworzenia serii z DataFrame ten atrybut jest ustawiany na nazwę kolumny.Możemy przekazać
rename
metodzie nazwę ciągu , aby ją zmienićRamki DataFrames nie mają tego atrybutu i infact zgłosi wyjątek, jeśli zostanie użyty w ten sposób
Przed wersją pandas 0.21 mogłeś
rename_axis
zmienić nazwy wartości w indeksie i kolumnach. Został wycofany, więc nie rób tegoźródło
df1 = df.set_index(['state', 'color'], append=True)
zdf1.rename_axis(['names', None, 'Colors'])
?Dla nowszych
pandas
wersjilub
Ta ostatnia jest wymagana, jeśli ramka danych powinna zachować wszystkie swoje właściwości.
źródło
W Pandas w wersji 0.13 i nowszych nazwy poziomów indeksu są niezmienne (typ
FrozenList
) i nie można ich już ustawiać bezpośrednio. Najpierw należy użyć,Index.rename()
aby zastosować nowe nazwy poziomów indeksu do indeksu, a następnie użyć,DataFrame.reindex()
aby zastosować nowy indeks do DataFrame. Przykłady:Dla wersji Pandy <0.13
Dla wersji Pandas> = 0.13
źródło
index
lubcolumn
bezpośrednio powoduje zmianę obu dla mnie (na Pandach 0.19), ale nie tą metodą.Możesz również użyć
Index.set_names
w następujący sposób:źródło
multiIndex
?MultiIndex(levels=[['A', 'B', 'C', 'D', 'E', 'F'], ['Y', 'Z']], labels=[[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]], names=['Portfolio', None])
Czy można zmienić nazwę naNone
tomeasures
?Jeśli chcesz użyć tego samego mapowania do zmiany nazwy obu kolumn i indeksu, możesz zrobić:
źródło
Jest jedynym, który wykonuje pracę za mnie (pandy 0,22,0).
Bez inplace = True nazwa indeksu nie jest ustawiona w moim przypadku.
źródło
możesz użyć
index
icolumns
atrybutypandas.DataFrame
. UWAGA: liczba elementów listy musi odpowiadać liczbie wierszy / kolumn.źródło