Bagaimana cara menghapus tanda baca dari file csv dengan python?

Pertama-tama, ketika saya menjalankan ini, tanda baca tidak dihapus, jadi saya bertanya-tanya apakah ada yang salah dengan ekspresi saya?

Kedua, saya mencoba untuk menghasilkan. csv daftar semua kata yang ditandai dengan tanda baca atau tidak, e. g. file teks bertuliskan "Halo. Ini hari yang menyenangkan. " akan keluar

ID, PUNCTUATION, WORD
1,  Y,           hello
2,  Y,           its
3,  N,           a
4,  N,           nice
5,  Y,           day

Saya tahu saya bisa menggunakannya. split() untuk memisahkan kata-kata tetapi selain itu saya tidak tahu bagaimana cara melakukannya. Bantuan apa pun akan dihargai

Saat bekerja dengan data tekstual, terkadang kita perlu melakukan beberapa transformasi pembersihan. Salah satunya biasanya adalah penghapusan tanda baca yang mungkin terjadi sebelum tokenisasi

Pada artikel hari ini kami akan menampilkan beberapa pendekatan berbeda untuk menghapus tanda baca dari kolom string di pandas DataFrames. Lebih khusus lagi, kami akan membahas penghapusan tanda baca menggunakan

  • str.replace()
  • regex.sub()
  • dan
    df['colD'] = df['colD'].str.replace(r'[^\w\s]+', '')print(df)
    colA colB colC colD
    0 1 10 True Hello
    1 2 15 False Hey
    2 3 11 True What
    3 4 12 True Exactly
    4 5 17 True Not bad
    5 6 10 False Yeap
    6 7 12 False Hi How are you
    7 8 19 True Nope
    _0

Pertama, mari buat contoh DataFrame yang akan kami rujuk di seluruh artikel ini untuk mendemonstrasikan beberapa konsep

import pandas as pd
df = pd.DataFrame(
[
(1, 10, True, 'Hello!!!'),
(2, 15, False, 'Hey..'),
(3, 11, True, 'What?!'),
(4, 12, True, 'Exactly!'),
(5, 17, True, 'Not bad'),
(6, 10, False, 'Yeap.!'),
(7, 12, False, 'Hi. How are you?'),
(8, 19, True, 'Nope,'),
],
columns=['colA', 'colB', 'colC', 'colD']
)
print(df)
colA colB colC colD
0 1 10 True Hello!!!
1 2 15 False Hey..
2 3 11 True What?!
3 4 12 True Exactly!
4 5 17 True Not bad
5 6 10 False Yeap.!
6 7 12 False Hi. How are you?
7 8 19 True Nope,

Menggunakan str. replace() dan ekspresi reguler

Opsi pertama yang kita miliki di sini, adalah metode

df['colD'] = df['colD'].str.replace(r'[^\w\s]+', '')print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
_1 yang dapat digunakan untuk menggantikan setiap kejadian ekspresi reguler yang disediakan dalam objek Seri

Jadi satu ekspresi reguler yang akan membantu kita adalah

df['colD'] = df['colD'].str.replace(r'[^\w\s]+', '')print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
2. Untuk memahami cara kerja regex ini, pertimbangkan fakta bahwa apa pun yang merupakan tanda baca sebenarnya adalah apa pun yang bukan kata atau kalimat. Jadi kami menggunakan negasi (i. e.
df['colD'] = df['colD'].str.replace(r'[^\w\s]+', '')print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
_3 ) untuk menunjukkan bahwa kami ingin mengganti non-kata dan non-kalimat (i. e. karakter tanda baca) dengan string kosong

df['colD'] = df['colD'].str.replace(r'[^\w\s]+', '')print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
_

Menggunakan re. metode sub()

Sekarang alternatif lain adalah metode

df['colD'] = df['colD'].str.replace(r'[^\w\s]+', '')print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
_4 dalam paket
df['colD'] = df['colD'].str.replace(r'[^\w\s]+', '')print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
5 yang menyediakan operasi pencocokan ekspresi reguler

df['colD'] = df['colD'].str.replace(r'[^\w\s]+', '')print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
_6

Kembalikan

df['colD'] = df['colD'].str.replace(r'[^\w\s]+', '')print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
_7 yang diperoleh dengan mengganti kejadian paling kiri yang tidak tumpang tindih dari
df['colD'] = df['colD'].str.replace(r'[^\w\s]+', '')print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
8 di
df['colD'] = df['colD'].str.replace(r'[^\w\s]+', '')print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
9 dengan pengganti
import redf['colD']=[re.sub('[^\w\s]+', '', s) for s in df['colD'].tolist()]
print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
0

Kami akan menggunakan ekspresi reguler yang sama yang telah kami gunakan di bagian sebelumnya

import redf['colD']=[re.sub('[^\w\s]+', '', s) for s in df['colD'].tolist()]
print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope

Perhatikan juga bahwa terkadang lebih efisien untuk terlebih dahulu mengompilasi ekspresi reguler sebelum substitusi. Sebagai contoh,

import re
r = re.compile(r'[^\w\s]+')
df['colD'] = [r.sub('', s) for s in df['colD'].tolist()]

Menggunakan str. menerjemahkan() metode

Terakhir, pendekatan lain adalah menggunakan metode

import redf['colD']=[re.sub('[^\w\s]+', '', s) for s in df['colD'].tolist()]
print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
_1 yang memetakan semua karakter dalam string input melalui tabel pemetaan yang diberikan

Intuisi di balik pendekatan kami adalah menggabungkan semua string pada setiap baris menjadi satu, menjadi string besar, di mana setiap string individu akan dipisahkan oleh pemisah pilihan kami.

Sebagai contoh, kita akan menggunakan karakter

import redf['colD']=[re.sub('[^\w\s]+', '', s) for s in df['colD'].tolist()]
print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
2 sebagai pemisah. Jadi pertama-tama kita perlu membuat string yang berisi karakter tanda baca yang ingin kita hilangkan dari string. Perhatikan bahwa pemisah TIDAK HARUS disertakan di sini. Jelas, pemisah yang dipilih tidak boleh ada di salah satu string yang ada jika tidak, pendekatan ini tidak akan berfungsi

sep = '|'
punctuation_chars = '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{}~'

Sekarang kita perlu menggunakan metode

import redf['colD']=[re.sub('[^\w\s]+', '', s) for s in df['colD'].tolist()]
print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
_3 untuk membuat tabel pemetaan untuk terjemahan yang dapat digunakan untuk metode
import redf['colD']=[re.sub('[^\w\s]+', '', s) for s in df['colD'].tolist()]
print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
4

mapping_table = str.maketrans(dict.fromkeys(punctuation_chars, ''))

Sekarang apa yang perlu kita lakukan pada DataFrame panda kita adalah menggabungkan semua string di kolom

import redf['colD']=[re.sub('[^\w\s]+', '', s) for s in df['colD'].tolist()]
print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
5 menggunakan pemisah yang dipilih
import redf['colD']=[re.sub('[^\w\s]+', '', s) for s in df['colD'].tolist()]
print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
6. Kemudian lakukan
df['colD'] = df['colD'].str.replace(r'[^\w\s]+', '')print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
_0 menggunakan tabel pemetaan yang kami buat untuk menghapus karakter tanda baca yang ditentukan dalam
import redf['colD']=[re.sub('[^\w\s]+', '', s) for s in df['colD'].tolist()]
print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
8 dan akhirnya
import redf['colD']=[re.sub('[^\w\s]+', '', s) for s in df['colD'].tolist()]
print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
9 string yang dihasilkan pada pemisah
import redf['colD']=[re.sub('[^\w\s]+', '', s) for s in df['colD'].tolist()]
print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
6 dan tetapkan hasilnya kembali ke kolom

df['colD'] = sep \
.join(df['colD'].tolist()) \
.translate(mapping_table) \
.split(sep)

Dan kolom target tidak boleh memiliki karakter tanda baca sama sekali

print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope

Perhatikan bahwa metode ini diimplementasikan dalam C sehingga diharapkan cukup efisien dan cepat

Pikiran Akhir

Dalam tutorial singkat hari ini, kami menjelajahi beberapa pendekatan berbeda yang dapat diterapkan untuk menghapus tanda baca dari kolom string di panda DataFrames

Secara lebih khusus kami memamerkan bagaimana melakukannya, menggunakan tiga pendekatan yang berbeda — str.replace(),

df['colD'] = df['colD'].str.replace(r'[^\w\s]+', '')print(df)
colA colB colC colD
0 1 10 True Hello
1 2 15 False Hey
2 3 11 True What
3 4 12 True Exactly
4 5 17 True Not bad
5 6 10 False Yeap
6 7 12 False Hi How are you
7 8 19 True Nope
0 dan regex.sub(). Perhatikan bahwa pendekatan yang berbeda mungkin memiliki kinerja yang berbeda secara signifikan (dalam hal kinerja dan efisiensi) pada ukuran kumpulan data yang berbeda. Jadi cara terbaik untuk memilih salah satu yang tepat untuk kasus penggunaan khusus Anda adalah dengan membandingkan hasilnya satu sama lain dan memilih yang lebih sesuai.

Jadilah anggota dan baca setiap cerita di Medium. Biaya keanggotaan Anda secara langsung mendukung saya dan penulis lain yang Anda baca. Anda juga akan mendapatkan akses penuh ke setiap cerita di Medium

Bagaimana Anda menghapus tanda baca dari kumpulan data dengan Python?

Cara Menghapus Tanda Baca Dari Panda .
str. mengganti()
regex. sub()
dan str. menerjemahkan()

Bagaimana cara menghapus tanda baca dari daftar dalam string Python?

Metode 1. Menggunakan Loop + Tanda Baca String . Dalam pendekatan ini, kami mengulangi string yang ingin kami bersihkan, memeriksa setiap karakter. Saat mengulang, kami menambahkan karakter saat ini di akhir string baru. use the basic for loop. In this approach, we loop through the string we wish to clean, checking each character. While looping through, we add the current character at the end of a new string.

Bagaimana cara menghapus semua tanda baca dari string di DataFrame Python?

tanda baca) def hapus_tanda baca(x). """ Helper berfungsi untuk menghilangkan tanda baca dari string x. setiap string """ coba. x = ''. bergabung(ch untuk ch di x jika ch tidak dikecualikan) kecuali. pass return x # Terapkan fungsi ke pelanggan DataFrame.

Bagaimana Anda menghapus karakter khusus dan tanda baca di Python?

Salah satu metode termudah dan tercepat untuk menghapus tanda baca dan karakter khusus dari sebuah string adalah dengan menggunakan metode terjemahan (). The built-in translate () function is available in the string library of Python.