Как последовательно l oop через несколько CSV-файлов из двух каталогов и добавить их соответственно и построить из них в python? - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь сделать график сравнения столбцов для двух типов переменных и их количества из CSV-файлов в python, используя pandas и matplotlib. Каждый тип переменных данных хранится в разных каталогах. Я создал два цикла как для разных данных, так и для concate их и построил их график. Но есть проблема в зацикливании и добавлении данных. Первый тип переменных данных не добавляется к следующему файлу, он всегда берет 1-й файл и объединяется со 2-м типом данных переменных (который добавляется правильно). Вот код, который я использую

path = '/scratch/plots/'   
A_files = sorted(glob.glob(os.path.join(path, "*table.csv")))
path = '/scratch/plots/B/'   

B_files = sorted(glob.glob(os.path.join(path, "*table.csv")))


# loop through the files and read them in with pandas
dataframes = []  # a list to hold all the individual pandas DataFrames
for csvfile in A_files:
    df = pd.read_csv(csvfile,usecols = ['COUNT','CLASS'])
    dataframes.append(df) #this case it is taking only first file to concate. Loop doest not appending correctly

dataframes2 = []
for x in B_files:
    fn= os.path.splitext(x)[0]
    df2 = pd.read_csv(x,usecols = ['COUNT','CLASS'])
    dataframes2.append(df2)

    A_df=df.iloc[2:12]
    B_df=df2.iloc[2:12]
    a= pd.concat([A_df,B_df], axis=1) 
    ax=a.set_index('CLASS').plot(kind='bar',rot=0, figsize=(15,10), fontsize=12)

    ax.legend(["A", "B"]);

    plt.savefig(''  + fn[:-32]+'_bargraph' + '.png', dpi=300)

    plt.show()

Как я могу добавить через каждый файл хотя 1-й oop из словаря ? Я приложил один пример объединенного фрейма данных и графики введите описание изображения здесь

1 Ответ

0 голосов
/ 18 февраля 2020

Рассмотрите возможность циклического прохождения по обоим каталогам по элементам с помощью zip (при условии равного количества файлов csv в обоих каталогах), что может избежать необходимости добавлять кадры данных. Ниже не вносятся изменения в черчение:

for f1, f2 in zip(A_files, B_files):
    fn = os.path.splitext(f2)[0]

    # HORIZONTAL CONCATENATION
    df = pd.concat([pd.read_csv(f1, usecols = ['COUNT','CLASS']).iloc[2:12],
                    pd.read_csv(f2, usecols = ['COUNT','CLASS']).iloc[2:12]],
                   axis = 1)

    # PLOT
    ax = df.set_index('CLASS').plot(kind='bar', rot=0, figsize=(15,10), fontsize=12)    
    ax.legend(["A", "B"]);

    plt.savefig(fn[:-32]+'_bargraph' + '.png', dpi=300)   
    plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...