Как удалить заголовок, транспонировать данные и объединить 100 файлов в новый CSV-файл? - PullRequest
0 голосов
/ 30 марта 2019

У меня есть 900 файлов, и все файлы находятся в одной папке. Имя файла выглядит как "0_dcef_abcd_cdef", "1_dcef_cdef_abcd", а внутри файлов столбцы выглядят так: Файл 1:

col1   col2       
1      2    
3      4

Файл 2:

col1    col2

5       6

7       8

Я хочу создать новый CSV-файл, в котором заголовки будут удалены из предыдущих файлов, а данные транспонированы, а в новом CSV-файле столбцы будут выглядеть следующим образом:

col1 col2 col3 col4 col5 col6 

0    dcef abcd cdef 1,3  2,4 

1    dcef cdef abcd 5,7  6,8 

Я пытался так:

import os

path = 'c:\\path'
for root,dirs,files in os.walk(path):
    for file in files:
        print (file)
        if file.endswith(".csv"):
            data = pd.read_csv(file,delimiter=',', encoding='latin-1') 

            st = file[0]
            st1 = file[2:6]
            st2 = file[7:11]
            st3 = file[12:16]
            print (st,st1,st2,st3)

            #  perform calculation
            with open('c:\\path\filename.csv', 'a', newline='') as csvfile:    # saving into the csv file
                saes = csv.writer(csvfile)
                saes.writerow(['col1']+["col2"]+["col3"]+["col4"]+ ['col5']+["col6"])
                saes.writerow([st]+ [st1]+[st2]+[st3]+ +data["col1"]+data["col2"])

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

Может кто-нибудь помочь мне сделать этот код, пожалуйста?

1 Ответ

0 голосов
/ 30 марта 2019

Если я правильно понял, я думаю, что этот подход может помочь:

import pandas as pd
import glob

csv_files = glob.glob('*.csv') # get a list of all csv files in the current folder
df = pd.DataFrame(columns=['col1','col2','col3','col4','col5','col6']) 
counter = 0

for csv_file in csv_files:
    df_file = pd.read_csv(csv_file,delimiter=',',encoding='latin-1')
    file_name_parts = csv_file.split('.')[0]
    file_name_parts = file_name_parts.split('_')  
    columns_list = []
    for column in df_file.columns:  # transform all columns into a list of comma separated strings 
        columns_list.append(df_file.loc[:,column].to_csv(header=None, index=False).strip('\n').replace('\n',','))    
    df.loc[counter] = file_name_parts + columns_list  # add the new row to the dataframe
    counter += 1
df.to_csv(r'C:\path\filename.csv',index=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...