Saya memiliki daftar negara yang harus diubah menjadi DataFrame. Masalahnya adalah bahwa setiap negara dan data adalah kata terpisah dalam daftar. Contoh:

[
 'Viet',
 'Nam',
 '0',
 '12.3',
 '0',
 'Brunei',
 'Darussalam',
 '12',
 '1.1',
 '0',
 'Bosnia',
 'and',
 'Herzegovina',
 '2',
 '2.1',
 '0',
 'Not',
 'applicable',
 'Turkey',
 '4',
 '4.3',
 '0',
 'Only',
 'partial',
 'coverage'
...
]

Bagaimana mengubahnya menjadi: [ ['Viet Nam', '0', '12.3', '0'], ['Brunei Darussalam', '12', '1.1', ...], ... ] atau `pd.DataFrame:

             country  coef1  coef2  grade
0           Viet Nam      0   12.3      0
1  Brunei Darussalam     12    1.1      0

CATATAN: Beberapa negara memiliki satu kata seperti Cina, Prancis, atau tiga kata atau lebih seperti Republik Korea. Juga, terkadang setelah rangkaian angka ini bisa ada komentar.

-1
miller 19 Maret 2020, 21:07

1 menjawab

Jawaban Terbaik

Coba ini:

Di mana data_in adalah data yang ingin Anda urai dan negara adalah daftar semua negara di dunia

import pandas as pd
import re

countries = ["Afghanistan", "Albania", "Algeria", "Andorra", "Angola", "Antigua and Barbuda", "Argentina", "Armenia" ...]

data_in = [
    'Viet', 'Nam', '0', '12.3', '0', 'Brunei', 'Darussalam', '12', '1.1', '0', 'Bosnia', 'and', 'Herzegovina', '2', '2.1', '0', 'Not', 'applicable', 'Turkey', '4', '4.3', '0'
]

data_out = []

country = coef1 = coef2 = grade = []

def is_country(elem):
  isCountry = False
  for country in countries:
    if elem.lower() in country.lower():
      isCountry = True
      break
  return isCountry

def is_num(elem):
  if re.search(r'\d', elem) is not None:
    return True
  else:
    return False

idx = 0
while idx < (len(data_in)):
  elem = data_in[idx]
  country = ''
  elements = []
  is_country_name = False
  data_out_local = []
  if is_country(elem):
    #
    while (not is_num(elem) and idx < len(data_in)):
      country += elem + " "
      idx += 1
      elem = data_in[idx]
    while(is_num(elem) and idx < len(data_in)):
      elements.append(elem)
      idx += 1
      if idx < len(data_in):
        elem = data_in[idx]
    data_out_local.append(country)
    data_out_local.extend(elements)
    data_out.append(data_out_local)
  idx += 1


df = pd.DataFrame(data_out, columns=['country', 'coef1', 'coef1', 'grade'])
print(df)

Keluaran pandas.DataFrame:

                   country coef1 coef1 grade
0                Viet Nam      0  12.3     0
1  Bosnia and Herzegovina      2   2.1     0
2                  Turkey      4   4.3     0

Solusi tidak standar, tetapi berhasil

1
P47 R1ck 19 Maret 2020, 21:48