删除pandas DataFrame列中字符串条目的结尾

Sha*_*ang 6 python string-matching dataframe pandas

我有一个pandas Dataframe,其中一列是文件列表

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   ....
....
Run Code Online (Sandbox Code Playgroud)

我想删除.txt每个条目中的文件扩展名filename.我该如何做到这一点?

我试过了:

df['filename'] = df['filename'].map(lambda x: str(x)[:-4])
Run Code Online (Sandbox Code Playgroud)

但是当我查看之后的列条目时df.head(),没有任何改变.

怎么做到这一点?

jez*_*ael 10

我认为你可以使用str.replace正则表达式.txt$'($- 匹配字符串的结尾):

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
Run Code Online (Sandbox Code Playgroud)

编辑:

rstrip可以去除更多的字符,如果字符串的末尾包含条纹串的一些字符(在这种情况下.,t,x):

例:

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
Run Code Online (Sandbox Code Playgroud)


小智 7

你可能想要:

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


EdC*_*ica 5

您可以使用str.rstrip删除结尾:

df['filename'] = df['filename'].str.rstrip('.txt')
Run Code Online (Sandbox Code Playgroud)

应该管用

  • 我认为,如果文件的最后一个字符包含“ t”,“ e”或“ x”,则“ rstrip”方法可能会出现问题。然后,删除此字符。尝试`df = pd.DataFrame({'A':{0:2,1:1},'C':{0:5,1:1},'B':{0:4,1:2} ,“文件名”:{0:“ test.txt”,1:“ x.txt”}},列= ['文件名','A','B','C'])) (3认同)