2017-02-14 4 views
2

Ich bin neu bei Python und versuchte, einige Sachen zu tun, um es auf die Hände zu tun.Split eine Zeichenfolge aus einer Spalte im Format pd.series Python

Dabei stehe ich hier fest.

Ich habe ein Datum im CSV-Format, die ich

data = pandas.read_csv("data.csv") 
data.head() 

    user rating  id 
0  1  3.5 1_1193 
1  1  3.5 1_661 
2  1  3.5 1_914 
3  1  3.5 1_3408 
4  1  3.5 1_2355 

Was ich brauche von der ‚id‘ Spalte ist, ich soll die Nummer erhalten, die nach dem ‚_‘ ist mit Python importiert.

Was ich versucht habe zu tun ist:

data.id.split('_') 

, die mir Fehler gab: „‚Dataframe‘Objekt hat kein Attribut‚split‘“

Daher habe ich die ‚id‘ Spalte als np.array nach dem Lesen von einer Lösung auf Stackoverflow.

s1 = data.id.values 
s2 = np.array2string(s1, separator=',',suppress_small=True) 
s2.split('_') 

Das gibt mir Ausgabe als:

["['1", 
"1193','1", 
"661','1", 
"914',..., '6040", 
"161','6040", 
"2725','6040", 
"1784']"] 
s2.split('_')[1] 

gab mir:

"1193','1" 

was soll ich tun, um die Zeichenfolge nach "_" zu bekommen?

Antwort

2

Sie müssen vektorisiert str.split mit der Auswahl der zweiten Liste von str[1] - auch können Sie docs überprüfen:

data['a'] = data.id.str.split('_').str[1] 
print (data) 
    user rating  id  a 
0  1  3.5 1_1193 1193 
1  1  3.5 1_661 661 
2  1  3.5 1_914 914 
3  1  3.5 1_3408 3408 
4  1  3.5 1_2355 2355 

print (data.dtypes) 
user  int64 
rating float64 
id   object 
a   object <- format is object (obviously string) 
dtype: object 
#split and cast column to int 
data['a'] = data.id.str.split('_').str[1].astype(int) 
print (data) 
    user rating  id  a 
0  1  3.5 1_1193 1193 
1  1  3.5 1_661 661 
2  1  3.5 1_914 914 
3  1  3.5 1_3408 3408 
4  1  3.5 1_2355 2355 

print (data.dtypes) 
user  int64 
rating float64 
id   object 
a   int32 <- format is int 
dtype: object 

auch benötigen, wenn id Spalte durch neue Werte ersetzen:

data.id = data.id.str.split('_').str[1] 
print (data) 
    user rating id 
0  1  3.5 1193 
1  1  3.5 661 
2  1  3.5 914 
3  1  3.5 3408 
4  1  3.5 2355 

data.id = data.id.str.split('_').str.get(1) 
print (data) 
    user rating id 
0  1  3.5 1193 
1  1  3.5 661 
2  1  3.5 914 
3  1  3.5 3408 
4  1  3.5 2355 
+0

Wenn meine oder eine andere Antwort hilfreich war, vergessen Sie nicht [akzeptieren] (http://meta.stackexchange.com/a/5235/295067) es. Vielen Dank. – jezrael

+0

Hallo. Dieser hat für mich funktioniert. :) –

+0

Bitte, um eine Antwort als akzeptiert markieren, klicken Sie auf das Häkchen neben der Antwort, um es von ausgegraut bis ausgefüllt. Danke. – jezrael

1

Ein paar mehr Optionen ...


str.extract

df.id.str.extract('.*_(.*)', expand=False) 


str.replace


Beide Yield

0 1193 
1  661 
2  914 
3 3408 
4 2355 
Name: id, dtype: object 
+0

Danke. Es hat für mich funktioniert. –

Verwandte Themen