Числа, лишенные '$' и ',' не будут преобразованы из str в int - PullRequest
0 голосов
/ 25 апреля 2020

Я довольно новичок в Python, но мне интересно брать таблицы, очищать их, а затем запускать вычисления. Я взял таблицу доходов из Википедии, очистил столбцы с номерами знаков доллара и запятых (например, от 26 400 до 26400 долларов США), а затем попытался преобразовать их в целые числа и установить условия на основе значений. Хотя суммы отображаются без '$' или ',' в обновленном фрейме данных, я все равно получаю сумму с '$' и ',' всякий раз, когда я ссылаюсь на отдельную запись или в столбцах.

Вот код - извиняюсь, если я должен был разделить блоки больше - это мой первый пост:

import requests
import pandas as pd
from bs4 import BeautifulSoup
URL = "https://en.wikipedia.org/wiki/List_of_Maine_locations_by_per_capita_income"
page = requests.get(URL)
soup = BeautifulSoup(page.content, 'html.parser')

all_tables = soup.find_all('table', class_="wikitable")

A = []
B = []
C = []
D = []
E = []
F = []
G = []

for row in all_tables[0].findAll('tr'):
    cells = row.findAll('td')
    if len(cells) == 7:
        A.append(cells[0].text.strip())
        B.append(cells[1].text.strip())
        C.append(cells[2].text.strip())
        D.append(cells[3].text.strip())
        E.append(cells[4].text.strip())
        F.append(cells[5].text.strip())
        G.append(cells[6].text.strip())

df = pd.DataFrame(A,columns=['Rank'])
df['County']=B
df['Per capita income']=C
df['Median household income']=D
df['Median family income']=E
df['Population']=F
df['Number of households']=G

df

Начальный кадр показывает '$' и ','.

В этот момент я удалил столбцы C через E всех '$' и ',' s. Вот, например, столбец C.

df['Per capita income'] = df['Per capita income'].str.replace(',', '')
df['Per capita income'] = df['Per capita income'].str.replace('$', '')

Затем я попытался преобразовать значения (без запятых и знаки доллара) из "str" ​​в "int".

df['Per capita income'] = df['Per capita income'].astype(int)

Знак доллара и запятая пропали, как показано ниже.

Хотя изменение правильно отображает в кадре данных, любая ссылка в любую ячейку по-прежнему выдается «str» со знаком доллара и запятой.

Argh!

Я предполагаю, что где-то пропустил шаг, потому что Я пробовал несколько методов преобразования "str" ​​в "int."

1 Ответ

0 голосов
/ 25 апреля 2020

Это будет работать согласно вашим сомнениям в комментариях.

import pandas as pd
from bs4 import BeautifulSoup
URL = "https://en.wikipedia.org/wiki/List_of_Maine_locations_by_per_capita_income"
page = requests.get(URL)
soup = BeautifulSoup(page.content, 'html.parser')

all_tables = soup.find_all('table', class_="wikitable")

A = []
B = []
C = []
D = []
E = []
F = []
G = []

for row in all_tables[0].findAll('tr'):
    cells = row.findAll('td')
    if len(cells) == 7:
        A.append(cells[0].text.strip())
        B.append(cells[1].text.strip())
        C.append(int(cells[2].text.strip().replace('$', '').replace(',', '')))
        D.append(cells[3].text.strip())
        E.append(cells[4].text.strip())
        F.append(cells[5].text.strip())
        G.append(cells[6].text.strip())

df = pd.DataFrame(A,columns=['Rank'])
df['County']=B
df['Per capita income']=C
df['Median household income']=D
df['Median family income']=E
df['Population']=F
df['Number of households']=G

df
...