#python #csv
#python #csv
Вопрос:
У меня есть файл csv, который выглядит следующим образом:
Хотелось бы создать новый csv-файл, который выглядит следующим образом:
Мои первые мысли о:
r1= []
r2 = []
with open('loadba1.csv', "r") as csv_file:
data = csv.reader(csv_file, delimiter=',')
f or rows in data:
r1.append(rows[0])
r2.append(rows[1])
r1 will give - TRUE
r2 will give - 'L_602356450160818331', 'wan1'
Затем снова выполните цикл r2, чтобы извлечь каждое значение и «как-то» объединить.
Я также не могу потерять отношение значений, например, TRUE — wan1 — L_602356450160818331
Я не уверен в подходе, который я должен принять. Пожалуйста, сообщите.
Комментарии:
1. Было бы полезно, если бы вы предоставили данные в виде текста, а не изображений.
2. Как вы узнаете, когда запускается новый элемент — всегда ли это будет две строки или вам нужно объединить все строки с пустым первым столбцом?
Ответ №1:
То, что вы, вероятно, хотите сделать, это использовать ручной while
цикл, а не for
:
with open('loadba1.csv', "r") as csv_file:
data = csv.reader(csv_file, delimiter=',')
while True:
try:
load_bal, interface = next(data)
except StopIteration:
break # end of file
try:
_, the_id = next(data)
except StopIteration:
raise ValueError("No ID row for %s" % interface)
... # write out (load_bal, interface, the_id)
Ответ №2:
import pandas as pd
df = pd.Dataframe("csv1.csv", index = False)
result = []
Id, LoadBal, Interface = "","",""
for index, row in df.iterrows():
for col, val in row.iteritems():
if col == 0 and val:
LoadBal = val
elif LoadBal:
Interface = val
result.append({"LoadBal": LoadBal, "Interface": Interface,"Id": Id })
Id, LoadBal, Interface = "","",""
elif col!=0:
Id = val
result = pd.DataFrame(result)
result.to_csv("csv2.csv")