Добавление строки заголовка со значениями для каждого столбца в несколько файлов CSV - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть несколько файлов CSV в одном каталоге, но без заголовков. Я ищу надежный способ добавить одинаковые заголовки сразу ко всем файлам в моем каталоге.

Sample.csv:

 John Doe    Guitar    4 units

Желаемый вывод после добавления заголовков 'name', ' продукт ',' количество ':

 name       product    quantity 
John Doe    Guitar     4 units

До сих пор я нашел способ добавить заголовки в один файл с помощью pandas:

from pandas import read_csv      
df = read_csv('/path/to/my/file/Sample.csv')
df.columns = ['name', 'product', 'quantity']
df.to_csv('/path/to/my/file/output.csv')

Теперь я думаю, мне придется добавьте al oop, который будет читать все файлы в моем каталоге, и добавьте нужную строку заголовка в каждый. Может ли кто-нибудь помочь мне с этим шагом или предложить какой-нибудь другой более простой подход, если это возможно? Заранее спасибо.

пытается добавить l oop, но выдает сообщение об ошибке:

import pandas as pd 
import os
import glob
from pandas import read_csv 
path = '/path/to/my/files/'
filelist = glob.glob(path + "/*.csv")
frame = pd.DataFrame()
list = []
frame = pd.DataFrame()
#whenever i run the below line it throws this error ->   IndentationError: expected an indented block
for file in filelist:
    df2 = pd.read_csv(path+file)
    df2.columns = ['name', 'product', 'qunatity']
    list.append(df2)
frame = pd.concat(list)

1 Ответ

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

Read_csv имеет параметр names, который вы можете использовать для столбцов.

Если вы хотите добавить один и тот же заголовок в каждый прочитанный csv. Вы можете просто передать столбцы в параметр names, когда читаете файлы .csv.


df = pd.read_csv('test_.csv', names = ['name', 'product', 'quantity'])

Редактирование кода. Вы делаете слишком много здесь, вам не нужно создавать фрейм данных в начале. Также не называйте свой список «список» список - это специальное слово в python.

Вам также не нужно добавлять путь к файлу, ваш список глобусов уже будет иметь полный путь, который вам нужен.

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

import pandas as pd 
import os
import glob
from pandas import read_csv 
path = '/path/to/my/files/'
filelist = glob.glob(path + "/*.csv")
df_list = []
for file in filelist:
# you also dont need to add path, the glob should already have the full path
    df2 = read_csv(file,names=['name', 'product', 'quantity'])
    ## save out files
    df2.to_csv(file,index=False)
    df_list.append(df2)
frame = pd.concat(df_list)
frame = pd.concat(df_list)

Также есть еще более простой способ сделать это с помощью понимания списка. Смотри ниже.

import pandas as pd 
import os
import glob
path = '/path/to/my/files/'
filelist = glob.glob(path + "/*.csv")
frame = pd.concat([pd.read_csv(file,names=['name', 'product', 'quantity']) for file in filelist])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...