#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')