Один поиск данных в другом файле csv и печать первых значений данных со значениями поиска

#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 != «] Ошибка значения: слишком много значений для распаковки