Как вставить значения фрейма данных в другой фрейм данных

#python #pandas #dataframe

#питон #pandas #фрейм данных

Вопрос:

Это первый фрейм данных:

 df1=

Name
a
b
 

а с другой стороны, у меня есть другие фреймы данных (CSV-файлы), которые имеют то же содержимое. Вот два примера:

 
df3=      df4=
A B C     A B C 
1 2 3     1 2 3
4 5 6     4 5 6
 

Я хочу добавить новый столбец в каждый фрейм данных и добавить каждый элемент первого набора данных к остальным. Ожидаемый результат:

 df3=      df4=
A B C D    A B C D
1 2 3 a    1 2 3 b
4 5 6 a    4 5 6 b
 

ПРИМЕЧАНИЕ: я читаю CSV-файлы как pandas, поэтому здесь несколько фреймов данных представляют собой несколько файлов csv, и я вставляю новый столбец в каждый файл, и этот столбец содержит элемент из первого фрейма данных.df1.

Это мой код, он добавляет последний элемент df1 ко всем другим df подобным образом:

 df3=      df4=
A B C D    A B C D
1 2 3 b    1 2 3 b
4 5 6 b    4 5 6 b

import csv
import glob
import pandas as pd

list1=[]
df=pd.read_csv('C:/dataframe_1.csv', sep=',')
for elem in df['Name']:
    list1.append(elem)

for elm in list1:
    os.chdir('C:/New')
    extension = 'csv'
    all_filenames = [i for i in glob.glob('*.{}'.format(extension))]
    for file in all_filenames:
        df1 = pd.read_csv(file, sep=',')
        df1['new_column']=elm
    df1.to_csv(file, index=False, na_rep='NaN')
 

Комментарии:

1. Возможно, вы захотите уточнить, что df3 и df4 являются выходными данными вашего кода.

Ответ №1:

Вам не нужно перебирать оба list1 и all_filenames . Вот где возникает проблема. Вы переопределяете каждый файл несколько раз, сохраняя только последнее значение из list1 (где кратное равно len(list1) ).

Отбросьте внешний цикл и enumerate вместо этого используйте list1 для индексации.

 list1=[]
df=pd.read_csv('C:/dataframe_1.csv', sep=',')
for elem in df['Name']:
    list1.append(elem)

os.chdir('C:/New')
extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]

for i, file in enumerate(all_filenames):
    df1 = pd.read_csv(file, sep=',')
    df1['new_column'] = list1[i]
    
df1.to_csv(file, index=False, na_rep='NaN')