Возникла проблема с преобразованием фрейма данных в csv

#python #pandas #dataframe #export-to-csv

#python #pandas #фрейм данных #экспорт в csv

Вопрос:

Я написал функцию для очистки файла csv с помощью функции регулярных выражений и экспорта его в csv. ввод fn_file для функции возьмет файл из папки ‘x’ с именем файла file.csv и обработает файл и экспортирует обработанный файл в папку ‘x’ как ‘file_processed.csv’. При преобразовании фрейма данных в csv отображается ошибка ниже. Как я могу добавить заголовок в виде столбцов в файл

 Function
--------
process_file

Use regex to create a file with title,date and header

Parameters
----------
fn_file : str
    Name of file scraped from WDET

fn_out : str
    Name of new, reformatted, file

Returns
-------
Nothing returned. Just creates output file.

Example
-------
process_file('E:/data.csv' , 'E:/data_processed.csv')
  

ошибка в строке

вызвать ошибку ValueError(‘Конструктор фрейма данных вызывается неправильно!’) Ошибка значения: конструктор фрейма данных вызывается неправильно!

s_df = pd.DataFrame(данные = fn_file, столбцы = [заголовок])

Мой код, приведенный ниже

 
def process_file(fn_file , fn_csv_out):

    s = re.compile(r'.*?word. ?(d{1,2}[ap]m-d{1,2}[ap]m)s $')

    date = re.compile(r'(Sunday)s (w s d ,s (2010))')

    he = re.compile(r'tw .tw tw tw s(w )tw $')

    son = re.compile(r'^.*td t. t')

    # Initialize counters
    num_lines = 0
    num_s = 0
    num_date = 0
    num_he = 0
    num_son = 0
    num_unmatched = 0

    # Initialize empty list to store output lines
    sonlines = []

    # Initialize string vars to use for the show title and date
    title = ''
    date = ''

    with open(fn_file) as f:

        # Loop over the lines in the file
        for line in f:

            num_lines  =1


            line = line.rstrip('n')

            m_s = re.match(s, line)
            m_date = re.match(date, line)
            m_he = re.match(he, line)
            m_son = re.match(son, line)


            if m_s:


                num_s  = 1

                # Get the show title
                ti =  m_s.group()

            elif m_date:
                # it's a date line
                num_date  = 1
                show_day = m_date.group(1)
                s_date = m_date.group(2)

            elif m_he:
                # it's a header line
                num_he  = 1
                heline = m_he.group()

            elif m_son:

                num_son  = 1
                son_group = m_son.group()
                son = re.split(r't ', son_group)
                son.insert(0,ti)
                son.insert(1,s_date)
                sonlines.append(son)


    header = re.split(r't ',heline.rstrip('t'))           
    header[0] = 'b'               
    header.insert(0,'ti')       
    header.insert(1,'s_date')    

    # Create pandas dataframe and export to csv

```lines throwing error
    s_df = pd.DataFrame(data = fn_file, columns = [header])
    s_df.to_csv(fn_csv_out, sep='t', index= False)
  
 
Last two lines are throwing error, Can you please help on the error. Thanks in advance.
  

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

1. является ли fn_file путем к файлу или фактическими данными?

2. Это фактический файл данных, если name == ‘ main ‘: process_file(‘data /file.csv’, ‘data / file_processed.csv’)

3. если бы fn_file содержал фактические данные, то open() не работал бы. вы пытаетесь создать фрейм данных, в котором данные являются путем к файлу. вам нужно открыть файл, в котором fn_file также хранит путь, и прочитать данные из файла. затем вы можете что-то с этим делать.

4. Что, если fn_file — это местоположение файла, как указано выше, данные — это папка, в которой находится file.csv, и я обрабатываю file.csv и экспортирую обработанный файл в папку данных как file_processed.csv

5. предполагается, что ваши данные должны быть строками данных? попробуйте выполнить pd.DataFrame(data= sonlines, sonlines)

Ответ №1:

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

s_df = pd.DataFrame(data = sonlines, columns = [header])

вместо

s_df = pd.DataFrame(data = fn_file, columns = [header])