私は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()
で列のエントリを見ると、何も変わっていません。
これはどのように行うのですか?
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
は、文字列の末尾にストライプ文字列の一部の文字が含まれている場合、さらに文字を削除できます(この場合は.
、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
あなたが望むかもしれません:
df['filename'] = df.apply(lambda x: x['filename'][:-4], axis = 1)
リスト内包表記を使用する
df['filename'] = [x[:-4] for x in df['filename']]