#python
#python
Вопрос:
Я пытаюсь выполнить операцию с файлом ниже, используя python
ввод 1: команда cat оболочки unix, указанная ниже имени файла данных: input1.txt
11/13/2020 07:41:09 TREE count1: id1 green001
11/13/2020 07:43:09 TREE count1: id1 black001
11/13/2020 07:45:09 TREE count1: id2 black001
11/13/2020 07:45:09 PLAN count1: id3 green002
Данные поиска: имя файла: lookup.csv
ID,item,message
id1,item1,message 1
id2,item2,message 2
id3,item3,message 3
Требуется вывод, подобный: где поле идентификатора в [id1, id2, id3 и т. Д. В] ввод1 поиск в идентификаторе, поданном в таблице поиска.
Output.txt
Time,Type,counts,id,item,message,colour
11/13/2020 07:41:09,TREE,count1,id1,item1,message 1,green001
11/13/2020 07:43:09,TREE,count1,id1,item1,message 1,black001
11/13/2020 07:45:09,TREE,count1,id2,item2,message 2,black001
11/13/2020 07:45:09,PLAN,count1,id3,item3,message 3,green002
Я пытался использовать этот код, но получаю ошибки.
r = pandas.read_csv(file1, sep=' ', index_col='ID')
with open('/home/s/lookup.csv','r') as w:
x = pandas.read_csv(w)
# w is not indexable
col = w['ID']
for line in w:
# w is not a table.
for col in w:
for row in r:
if row in col:
print(line)
Любые советы будут оценены!
Комментарии:
1. Вы не сообщили нам, какие ошибки вы получили. Если вы используете Pandas, вы можете объединить оба фрейма данных вместе на основе идентификаторов, а затем выгрузить их обратно в файл. Есть ли у вас ошибки, связанные с комментарием «w не индексируется»?
Ответ №1:
pandas
может объединить данные для вас. Когда вы объединяете «по» столбцу, значение столбца для любой строки используется для получения столбцов из другого фрейма данных. Возможно, вам придется повозиться с именами столбцов и порядком, а затем записать csv, когда вы закончите.
import pandas as pd
# read input and remove spurious : at end of count
input1 = pd.read_csv("input1.csv", sep=' ',
names=["date","time", "tree","count","ID", "info"])
input1["count"] = input1["count"].apply(lambda s:s[:-1])
# read lookup and merge
lookup = pd.read_csv("lookup.csv")
merged = input1.merge(lookup, on="ID")
# collapse time and date to single column
merged["time"] = merged["date"] " " merged["time"]
del merged["date"]
# output
print(merged)
merged.to_csv("testme.csv", index=False)
Комментарии:
1. спасибо за вашу помощь. но дата и время совпадают, и у меня есть: дополнительные данные на входе, которые необходимо обработать.
2. Я обрезал «:» с
input1["count"].apply(lambda s:s[:-1])
помощью . Поскольку дата и время разделены пробелом, они будут разными столбцами в dataframe. Я добавлю некоторый код для их объединения.3. Как сохранить цель в виде файла csv, где дата и время не должны разделяться ,
4. Это в примере.
merged["date"] " " merged["time"]
создан один столбец (и дата удаления). Он будет записывать в csv без запятой.
Ответ №2:
import pandas as pd
lookup = pd.read_csv("lookup.csv")
input = []
with open("input1.txt") as fp:
d,t,tr,co,key,color = [x for x in fp.read().split(" ") if x != '']
input.append({"Time": " ".join([d,t]), "Type": tr, "Counts": co[:-1], "ID": key, "Colour": color})
# co[:-1] removes the trailing ":" from the Counts columns.
rslt = pd.DataFrame(input)
merged = pd.merge(left=lookup, right=rslt, left_on="ID", right_on="ID")
print(merged)
Комментарии:
1. спасибо за помощь! но я получаю ошибку ниже: трассировка (последний последний вызов): File «2.py «, строка 5, в <модуле> d, t,tr,co,ключ,color = [x для x в fp.read().split(» «) если x != «] Ошибка значения: слишком много значений для распаковки