Как сделать сюжет из метода read_ html из Pandas на Python 2.7? - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь построить график (в зависимости от того, что) и не могу увидеть метод .plot (), а также я получаю эту трассировку: (Данные напечатаны из df)

[                       2019      I     II    III IV
Total                                              
3373           Barrio1   1175   1117   1081  Â
8079             Barrio2   2651   2570   2858  Â
3839        Barrio232      1364   1237   1238  Â
1762              Barrio2342342       544    547    671  Â
3946   Barrio224235      1257   1291   1398  Â
Traceback (most recent call last):
  File "D:/Users/str_leu/Documents/PycharmProjects/flask/graphs.py", line 13, in <module>
    plt.scatter(df['barrios'], df['leuros'])
TypeError: list indices must be integers, not str

Process finished with exit code 1

и код:

import pandas
import matplotlib.pyplot as plt
from bs4 import BeautifulSoup

table = BeautifulSoup(open('./PycharmProjects/flask/tables.html', 'r').read(), features="lxml").find('table')


df = pandas.read_html(str(table), decimal=',', thousands='.', index_col=0)

print df

plt.scatter(df['barrios'], df['euros'])

plt.show()

ОБНОВЛЕНО

df = pandas.read_html(str(table), decimal=',', thousands='.', index_col=2, header=1)

В конце я нашел, как с этим бороться, но проблема в последнем столбце (странный символ) кто-нибудь знает, как его пропустить?

ОБНОВЛЕНО2

[               District2352  1.175  1.117  1.081     Unnamed: 5
3.373                                                      
8079            District23422   2651   2570   2858     NaN
3839            District7678   1364   1237   1238      NaN
1762            Distric3    544    547    671         NaN
3946            dISTRICT1   1257   1291   1398        NaN

Нужно удалить последний столбец (весь), но не знаю, какой процесс передать из метода read_ html pandas в DataFrame, а затем нарисуйте график ...

ОБНОВЛЕНО 3

                     2019      I     II    III  IV
Total                                              
3373            dISTRICT1   1175   1117   1081 NaN
8079            District2   2651   2570   2858 NaN

Это пример с заголовками

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

pandas.read_html возвращает список фреймов данных. В настоящее время вы пытаетесь получить доступ к списку, используя str, что вызывает ошибку. В зависимости от ваших требований, вы можете либо построить столбцы каждого из них, используя для l oop, либо каким-либо образом объединить кадры данных, используя pd.concat

import seaborn as sns

# If each dataframe holds the same columns you want to plot
dfs = pandas.read_html(str(table), decimal=',', thousands='.', index_col=0)

for df in dfs: 

    # you would need to individually define the plot you want
    df["2019"].value_counts().plot(kind='bar')
    df.plot(x='I', y='II') # etc

    # you could also try seaborn's pairplot. This will omit categorical data
    sns.pairplot(df)
0 голосов
/ 06 февраля 2020

РЕШЕНИЕ

dfs = pandas.read_html(str(table), decimal=',', thousands='.', header=1, index_col=1, encoding='utf-8').pop(0)

print dfs

x=[]
y=[]
y1=[]
y2=[]

for i, row in dfs.iterrows():
    x.append(row[0])
    y.append(int(row[1]))
    y1.append(int(row[2]))
    y2.append(int(row[3]))

plt.plot(x,y)
plt.plot(x,y1)
plt.plot(x,y2)
plt.show()
...