web-dev-qa-db-ja.com

pandas DataFrame列の文字列エントリの終わりを削除する

私はpandas 1列のファイルのリストのデータフレームを持っています

_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   ....
....
_

filenameの各エントリからファイル拡張子_.txt_を削除したいと思います。どうすればこれを達成できますか?

私は試した:

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

しかし、後でdf.head()で列のエントリを見ると、何も変わっていません。

これはどのように行うのですか?

7
ShanZhengYang

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

編集:

rstripは、文字列の末尾にストライプ文字列の一部の文字が含まれている場合、さらに文字を削除できます(この場合は.tx):

例:

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
11
jezrael

str.rstrip 末尾を削除するには:

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

うまくいくはず

6
EdChum

あなたが望むかもしれません:

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

3
Paweł Kordek

リスト内包表記を使用する

df['filename'] = [x[:-4] for x in df['filename']]
1
Blue Moon