Я хочу объединить два 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)
0
Ying Du 25 Сен 2018 в 04:32

2 ответа

Лучший ответ

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

Пытаться:

merged = pd.concat([f1, f2])
0
panktijk 25 Сен 2018 в 01:59

Вы создаете файл дважды! 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
nosklo 25 Сен 2018 в 04:40