Saya ingin mengekstrak angka dari string seperti 10,5 \ q \ c, A14.5, 6,7 \ p, nan \ b \ t. Mereka muncul di banyak kolom jadi apa cara paling efisien untuk menghapus string ini dan hanya mendapatkan angka? Ini adalah kode yang saya tulis sejauh ini:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pylab import rcParams
%matplotlib inline

df = pd.read_csv('../assignment1/datasets/shared_prosperity_assignment_dataset_mangled.csv', na_values=['-','???','NAN',-1.5])

df['year'] = pd.to_datetime(df['year'])
df['yyyy'] = pd.DatetimeIndex(df['year']).year
df = df.set_index(["yyyy"], inplace=False).sort_index()

Contoh kolom yang memiliki campuran string dan angka di setiap bidang:

df['education_spend_as_percent_of_total_gov_expenses'].tail()
yyyy
2014    17.3\W
2015    17.8\K
2016    17.8\U
2017     nan\O
2018     nan\W
Name: education_spend_as_percent_of_total_gov_expenses, dtype: object

df['teriary_education_participation_rate'].tail()
yyyy
2014    10.2\Y\I
2015     9.8\G\L
2016     9.4\T\M
2017     nan\A\G
2018     nan\L\G
Name: teriary_education_participation_rate, dtype: object

Jadi bagaimana saya mendapatkan hanya angka? Apakah ada cara selain menggunakan regex

0
Ilovenoodles 6 April 2021, 02:41

2 jawaban

Jawaban Terbaik

Dengan asumsi Anda mengharapkan hanya satu nomor per kolom, Anda dapat mencoba menggunakan str.extract di sini:

df["some_col"] = df["some_col"].str.extract(r'(\d+(?:\.\d+)?)')
3
Tim Biegeleisen 5 April 2021, 23:46

Saya akan menggunakan fungsi dengan regex yang cocok dengan pola apa yang Anda lihat. Sejak Anda menandai PANDAS dan DataFrame Saya berasumsi Anda bekerja dengan bingkai data tetapi output sampel pasti akan membantu. Inilah yang akan saya atasi:

import pandas as pd
import numpy as np
import re

def extract_numbers (column1: str):
  result = np.nan
  for x in column1.split():
    if re.search(r'\d+\.?\d+', x)
      result = float(re.search(r'\d+\.?\d+', x).group())

    if pd.notnunll(result):
      return result

df['Numbers'] = df['YourColumn'].apply(extract_numbers)

Hasil dari fungsi ini akan menjadi kolom baru yang disebut "angka" yang berisi nomor yang diekstraksi dari masing-masing string. Ini akan mengembalikan nan ketika nomor tidak ditemukan (atau dicocokkan dengan). Setelah Anda memiliki kolom dengan nilai angka dari setiap string, Anda dapat berinteraksi dengannya.

0
git_rekt 6 April 2021, 00:28