Saya tidak dapat menemukan mengapa kesalahan terjadi.

Kerangka data terlihat seperti:

 start_date    end_date         pollster    sponsor  sample_size population  \
0  2020-02-02  2020-02-04           YouGov  Economist       1500.0          a   
1  2020-02-02  2020-02-04           YouGov  Economist        376.0          a   
2  2020-02-02  2020-02-04           YouGov  Economist        523.0          a   
3  2020-02-02  2020-02-04           YouGov  Economist        599.0          a   
4  2020-02-07  2020-02-09  Morning Consult        NaN       2200.0          a   

Saya mencoba untuk mendapatkan waktu 'Huffington Post' muncul sebagai sponsor.

Pertama, saya mencoba melihatnya dengan menggunakan kode

polls = list(set(covid_approval_polls["sponsor"]))

Huff_Post_regexp = r"\bHuffington Post\b"

Huff_Post = [
   approval 
   for approval in polls 
   if re.search(Huff_Post_regexp, approval) is not None
]

Kemudian, kesalahan yang ditampilkan adalah

TypeError: expected string or bytes-like object

Mengapa ini tidak berhasil?

Terima kasih sebelumnya

1
icatalan 26 Mei 2021, 23:03

1 menjawab

Jawaban Terbaik

Argumen re.search harus berupa "string" atau "byte". Seperti yang saya lihat di kolom "sponser" Anda, ada NaN yang ditafsirkan sebagai float sehingga dalam iterasi approval itu bukan string atau byte. Inilah mengapa Anda mendapatkan TypeError itu.

Tulis kode ini untuk melihatnya beraksi:

for item in list(set(covid_approval_polls["sponsor"])):
    print(item, type(item))

Untuk mengatasi ini, Anda dapat mengabaikan re.search dengan kondisi tunggal pd.isna() atau mungkin mengganti NaN di DataFrame dengan string kosong "".

0
SorousH Bakhtiary 26 Mei 2021, 21:11