Как объединить два CSV-файла по вертикали и сохранить формат данных (число в число, строка в строку) - PullRequest
0 голосов
/ 25 сентября 2018

Я хочу объединить два CSV-файла по вертикали.Один файл содержит только строки (первый столбец, первые три строки).Второй файл содержит строки и цифры.

Я могу распечатать их.Но есть проблема, чтобы сохранить их построчно в CSV-файл.Также есть проблема, чтобы сохранить тип данных.(число к числу, строка к строке).

Ниже приведен код, который я использовал:

Метод 1:

import csv


file1 = ("/Users/yingdu/GitHub/20180807/String_.csv")
file2 = ("/Users/yingdu/GitHub/20180807/CovertFile_SampleData4.csv")


combined_file = ("/Users/yingdu/GitHub/20180807/combined_file.csv")
spreadsheet_filenames = [file1,file2]

for filename in spreadsheet_filenames:
    with open(filename, 'r') as csvfile:
        output = csv.reader(csvfile)
        for row in output:
            print row

Ниже приведены мои результаты печати:

['SoftGenetics GeneMarker Trace Data Export']
['Raw Data']
['PAT_Ladder_1.fsa']
['Blue', 'Green', 'Yellow', 'Red', 'Orange']
['82.45', '97.65', '229.05', '85.25', '44.85']
['151.08', '167.48', '454.48', '136.68', '59.28']
['144.45', '161.25', '440.25', '133.65', '60.45']
['49.5', '65.9', '105.5', '69.1', '44.5']
['73.25', '109.45', '326.65', '70.85', '26.85']
['66.58', '97.18', '322.58', '65.38', '24.78']
['56.95', '77.35', '138.35', '91.95', '61.75']
['66.45', '79.65', '351.05', '69.25', '35.25']

Ниже приведен код, который я использовал для записи файла CSV, который сохраняет все данные в новый файл CSV.Я обнаружил, что CSV-файл не был создан правильно.

import csv


file1 = ("/Users/yingdu/GitHub/20180807/String_.csv")
file2 = ("/Users/yingdu/GitHub/20180807/CovertFile_SampleData4.csv")


combined_file = ("/Users/yingdu/GitHub/20180807/combined_file.csv")
spreadsheet_filenames = [file1,file2]

for filename in spreadsheet_filenames:
    with open(filename, 'r') as csvfile:
        output = csv.reader(csvfile)
        with open(Combined_File, mode='w') as Combined_File:
            for row in output:
                print row
                csv_writer = csv.writer(Combined_File, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
                csv_writer.writerow(row)

Метод 2:

С помощью «dataframe.concat».Я рассматриваю файл один и файл два как два объекта (фреймы данных).объединены данные, которые я ожидалНо файл "комбинированный_файл.csv" здесь не был создан / сгенерирован методом df.to_csv.И сообщения об ошибке нет.

f1 = pd.read_csv(file1, header=None)
f2 = pd.read_csv(file2, header=None)
merged = pd.concat([f1, f2])
merged.to_csv(combined_file, index=None, header=None)

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Вы создаете файл дважды!open(Combined_File, mode='w') перезаписывает файл, и поскольку он находится внутри цикла, вы получите данные только из последнего файла.

Еще один совет: вы можете использовать writerows() для записи нескольких строк одним вызовом, иэто требует итерации, поэтому вы можете просто передать csv_input, чтобы написать все:

import csv

file1 = "/Users/yingdu/GitHub/20180807/String_.csv"
file2 = "/Users/yingdu/GitHub/20180807/CovertFile_SampleData4.csv"
spreadsheet_filenames = [file1, file2]
combined_file = "/Users/yingdu/GitHub/20180807/combined_file.csv"

with open(combined_file, 'w') as output_file: # create output outside the for loop
     csv_output = csv.writer(output_file, delimiter=',') 
     for filename in spreadsheet_filenames:
         with open(filename) as input_file:
             csv_input = csv.reader(input_file, delimiter=',')
             csv_output.writerows(csv_input)
0 голосов
/ 25 сентября 2018

concat принимает список фреймов данных в качестве первого аргумента.

Попробуйте:

merged = pd.concat([f1, f2])
...