Построение нескольких столбцов разных размеров с помощью панд - PullRequest
0 голосов
/ 27 сентября 2018

Я довольно новичок в Pandas, но обычно, что я делаю с данными (когда все столбцы имеют одинаковый размер), я строю матрицы np.zeros (count), а затем использую цикл for для заполнения данных из текстафайл (np.genfromtxt ()) для построения графиков и анализа в matplotlib.

Однако сейчас я пытаюсь реализовать аналогичный анализ со столбцами разных размеров на одном графике из файла CSV.

Например:

data.csv:

A  B  C  D  E  F 

1  2  3  4  5  6 

2 3 4 5 6 7

3 4 5 6

4 5


df = pandas.read_csv('data.csv')

ax = df.plot(x = 'A', y = 'B')

df.plot(x = 'C', y = 'D', ax = ax)

df.plot(x = 'E', y = 'F', ax = ax)

Этот код отображает первые два на одном графике, но остальная информация теряется (и их многобольше столбцов с несоответствующими размерами, но столбцы x / y, которые я строю, имеют одинаковый размер).

Есть ли более простой способ сделать все это?Спасибо!

1 Ответ

0 голосов
/ 28 сентября 2018

Вот как вы можете обобщить свое решение:

Я отредактировал свой ответ, чтобы добавить обработку ошибок.Если у вас есть последний одинокий столбец, он все равно будет работать.

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

data = {
    'A' : [1, 2, 3, 4],
    'B' : [2, 3, 4, 5],
    'C' : [3, 4, 5, np.nan],
    'D' : [4, 5, 6, np.nan],
    'E' : [5, 6, np.nan, np.nan],
    'F' : [6, 7, np.nan, np.nan]
}

df = pd.DataFrame(data)

def Chris(df):
    ax = df.plot(x='A', y='B')
    df.plot(x='C', y='D', ax=ax)
    df.plot(x='E', y='F', ax=ax)
    plt.show()

def IMCoins(df):
    fig, ax = plt.subplots()

    try:
        for idx in range(0, df.shape[1], 2):
            df.plot(x = df.columns[idx],
                    y = df.columns[idx + 1],
                    ax= ax)
    except IndexError:
        print('Index Error: Log the error.')

    plt.show()

Chris(df)
IMCoins(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...