2016-05-03 11 views
0

ich Pandas Datenrahmen mit einer Spalte habe eine Liste von Dateienentfernen Ende der Schnur Einträge in Pandas Dataframe Spalte

import pandas as pd 
df = pd.read_csv('fname.csv') 

df.head() 

filename A B C 
fn1.txt 2 4 5 
fn2.txt 1 2 1 
fn3.txt .... 
.... 

Ich mag würde die Dateierweiterung .txt von jedem Eintrag in filename löschen. Wie erreiche ich das?

Ich habe versucht:

df['filename'] = df['filename'].map(lambda x: str(x)[:-4]) 

aber wenn ich mir die Spalteneinträge suchen danach mit df.head() hat sich nichts geändert.

Wie macht man das?

+0

sind deine Daten '' fn1.txt'' oder 'fn1.txt'? Also haben Sie Strings als Ihre Daten zitiert? – EdChum

+0

@EdChum Ich sehe keine Zitate – ShanZhengYang

Antwort

3

funktionieren sollte ich glaube, Sie str.replace mit regex .txt$' verwenden ($ - matches the end of the string):

import pandas as pd 

df = pd.DataFrame({'A': {0: 2, 1: 1}, 
        'C': {0: 5, 1: 1}, 
        'B': {0: 4, 1: 2}, 
        'filename': {0: "txt.txt", 1: "x.txt"}}, 
       columns=['filename','A','B', 'C']) 

print df 
    filename A B C 
0 txt.txt 2 4 5 
1 x.txt 1 2 1 

df['filename'] = df['filename'].str.replace(r'.txt$', '') 
print df 
    filename A B C 
0  txt 2 4 5 
1  x 1 2 1 

df['filename'] = df['filename'].map(lambda x: str(x)[:-4]) 
print df 
    filename A B C 
0  txt 2 4 5 
1  x 1 2 1 

df['filename'] = df['filename'].str[:-4] 
print df 
    filename A B C 
0  txt 2 4 5 
1  x 1 2 1 

EDIT:

rstrip kann mehr Zeichen entfernen, wenn das Ende der Saiten einige Zeichen der gestreiften Zeichenfolge enthält (in diesem Fall ., t, x):

Beispiel:

print df 
    filename A B C 
0 txt.txt 2 4 5 
1 x.txt 1 2 1 

df['filename'] = df['filename'].str.rstrip('.txt') 

print df 
    filename A B C 
0   2 4 5 
1   1 2 1 
+0

Ich bekomme den folgenden 'AttributeError': AttributeError: 'str' -Objekt hat kein Attribut 'str' – ShanZhengYang

+0

Try Cast-Spalte' filename' zu ​​'string' -' df ['filename'] = df ['filename']. Astype (str) ' – jezrael

+0

Auch wenn die Spalte als String umgewandelt wird, funktioniert keine dieser Methoden – ShanZhengYang

1

Sie können str.rstrip verwenden die Endungen zu entfernen:

df['filename'] = df['filename'].str.rstrip('.txt') 

+0

weiß nicht, es hätte funktionieren sollen, aber die Frage bleibt, haben Ihre Daten Zitate oder nicht? – EdChum

+0

Wenn ich 'df.head()' verwende, sehe ich keine Anführungszeichen – ShanZhengYang

+0

Also, wenn ich den obigen Code versuche, bekomme ich den folgenden Fehler 'AttributeError:' str 'Objekt hat kein Attribut' str '' – ShanZhengYang

1

Sie mögen:

df['filename'] = df.apply(lambda x: x['filename'][:-4], axis = 1)

0

Verwendung Liste Verständnis

df['filename'] = [x[:-4] for x in df['filename']] 
Verwandte Themen