Chcę dodać _x
sufiks do każdej nazwy kolumny w następujący sposób:
featuresA = myPandasDataFrame.columns.values + '_x'
Jak mam to zrobic? Dodatkowo, gdybym chciał dodać x_
jako przyrostek, jak zmieniłoby się rozwiązanie?
Chcę dodać _x
sufiks do każdej nazwy kolumny w następujący sposób:
featuresA = myPandasDataFrame.columns.values + '_x'
Jak mam to zrobic? Dodatkowo, gdybym chciał dodać x_
jako przyrostek, jak zmieniłoby się rozwiązanie?
Odpowiedzi:
Możesz użyć list
zrozumienia:
df.columns = [str(col) + '_x' for col in df.columns]
Istnieją również wbudowane metody, takie jak .add_suffix()
i .add_prefix()
jak wspomniano w innej odpowiedzi.
Moim zdaniem najładniejszy sposób dodania sufiksu jest następujący.
df = df.add_suffix('_some_suffix')
Ponieważ jest to funkcja, która jest wywoływana w DataFrame i zwraca DataFrame - możesz jej użyć w łańcuchu wywołań.
inplace=True
opcji parametru). W przeciwnym razie idealnie.
Jeśli próbujesz modyfikować df
w miejscu, najtańszą (i najprostszą) opcją jest dodawanie na miejscu bezpośrednio df.columns
(tj. Używanie Index.__iadd__
).
df = pd.DataFrame({"A": [9, 4, 2, 1], "B": [12, 7, 5, 4]})
df
A B
0 9 12
1 4 7
2 2 5
3 1 4
df.columns += '_some_suffix'
df
A_some_suffix B_some_suffix
0 9 12
1 4 7
2 2 5
3 1 4
Aby dodać przedrostek, użyj podobnie
df.columns = 'some_prefix_' + df.columns
df
some_prefix_A some_prefix_B
0 9 12
1 4 7
2 2 5
3 1 4
Inną tanią opcją jest użycie list składanych z f-string
formatowaniem (dostępne na python3.6 +).
df.columns = [f'{c}_some_suffix' for c in df]
df
A_some_suffix B_some_suffix
0 9 12
1 4 7
2 2 5
3 1 4
Podobnie w przypadku przedrostka
df.columns = [f'some_prefix{c}' for c in df]
Możliwe jest również dodawanie * poprawek podczas łączenia metod. Aby dodać sufiks, użyjDataFrame.add_suffix
df.add_suffix('_some_suffix')
A_some_suffix B_some_suffix
0 9 12
1 4 7
2 2 5
3 1 4
To zwraca kopię danych. IOW, df
nie jest modyfikowany.
Dodanie przedrostków również odbywa się za pomocą DataFrame.add_prefix
.
df.add_prefix('some_prefix_')
some_prefix_A some_prefix_B
0 9 12
1 4 7
2 2 5
3 1 4
Co również nie zmienia df
.
add_*fix
Są to dobre metody, jeśli próbujesz wykonać łańcuch metod:
df.some_method1().some_method2().add_*fix(...)
Jednak add_prefix
(i add_suffix
) tworzy kopię całej ramki danych, tylko po to, aby zmodyfikować nagłówki. Jeśli uważasz, że to marnotrawstwo, ale nadal chcesz łączyć się w sieć, możesz zadzwonić pipe
:
def add_suffix(df):
df.columns += '_some_suffix'
return df
df.some_method1().some_method2().pipe(add_suffix)
new
lub old
) zamiast wszystkich kolumn? Dzięki.
df = pd.DataFrame([[1,2,3]]*10)
-> df.columns
, wtedy użyjeszdf.add_suffix('_x')
df.columns = df.columns.astype(str) + '_x'
jak pokazuje moja pierwsza metoda.
Nie widziałem tego rozwiązania zaproponowanego powyżej, więc dodaj to do listy:
df.columns += '_x'
I możesz łatwo dostosować się do scenariusza przedrostka.
df = pd.DataFrame([[1,2,3]]*10)
-> df.columns
, wtedy użyjeszdf.add_suffix('_x')
Znam 4 sposoby dodawania sufiksu (lub prefiksu) do nazw kolumn:
1- df.columns = [str(col) + '_some_suffix' for col in df.columns]
lub
2- df.rename(columns= lambda col: col+'_some_suffix')
lub
3- df.columns += '_some_suffix'
dużo łatwiejsze.
lub najmilszy:
3- df.add_suffix('_some_suffix')
DataFrame.rename
.Wycofanie add_prefix
iadd_suffix
W przyszłych wersjach pand add_prefix
i add_suffix
zostaną wycofane . Nowa zalecana metoda polega na zastosowaniu DataFrame.rename
:
df = pd.DataFrame({'A': range(3), 'B': range(4, 7)})
print(df)
A B
0 0 4
1 1 5
2 2 6
Korzystanie rename
z axis=1
i formatowanie ciąg:
df.rename('col_{}'.format, axis=1)
# or df.rename(columns='col_{}'.format)
col_A col_B
0 0 4
1 1 5
2 2 6
Aby faktycznie nadpisać nazwy kolumn, możemy przypisać zwrócone wartości do df
:
df = df.rename('col_{}'.format, axis=1)
lub użyj inplace=True
:
df.rename('col_{}'.format, axis=1, inplace=True)