Mam ramkę danych w pandach z mieszanymi kolumnami danych int i str. Chcę najpierw połączyć kolumny w ramce danych. Aby to zrobić, muszę przekonwertować int
kolumnę na str
. Próbowałem zrobić co następuje:
mtrx['X.3'] = mtrx.to_string(columns = ['X.3'])
lub
mtrx['X.3'] = mtrx['X.3'].astype(str)
ale w obu przypadkach to nie działa i otrzymuję komunikat o błędzie „nie można połączyć obiektów„ str ”i„ int ””. Łączenie dwóch str
kolumn działa doskonale.
Odpowiedzi:
Konwertuj serię
Nie zapomnij przypisać wyniku z powrotem:
Konwertuj całą ramkę
źródło
Zmień typ danych kolumny DataFrame:
Do int:
df.column_name = df.column_name.astype(np.int64)
Do str:
df.column_name = df.column_name.astype(str)
źródło
apply(str)
w moim teście jest około 4x wolniejsze niż z @Jeffpd.Series(np.arange(1000000))
.df['A'] = df['A'].apply(str)
też działa. Odpowiedź udzielona przez @Jeff nie działa dla mnie.apply()
zamiastastype()
: timeit.Timer ('c.apply (str)', setup = 'import pandas as pd; c = pd.Series (range ( 1000)) '). Timeit (1000) >>> 0.41499893204309046 >>> timeit.Timer (' c.astype (str) ', setup =' import pandy as pd; c = pd.Series (range (1000)) ' ) .timeit (1000) 0.8004439630312845Ostrzeżenie : oba podane rozwiązania ( astype () i apply () ) nie zachowują wartości NULL ani w formie nan, ani w postaci None.
Uważam, że jest to naprawione przez implementację to_string ()
źródło
Użyj poniższego kodu:
źródło
Tylko dla dodatkowego odniesienia.
Wszystkie powyższe odpowiedzi będą działać w przypadku ramki danych. Ale jeśli używasz lambda podczas tworzenia / modyfikowania kolumny, to nie zadziała, ponieważ tam jest traktowany jako atrybut int zamiast serii pand. Musisz użyć str (target_attribute), aby uczynić go ciągiem. Proszę zapoznać się z poniższym przykładem.
źródło