Добавьте новую строку в CSV Dataframe внутри для l oop с Pandas - PullRequest
1 голос
/ 16 апреля 2020

Здравствуйте, я действительно застрял и не могу разобраться с этой проблемой, действительно ценю любую помощь или руководство. Я пытался задать этот вопрос несколько раз по-разному, но не смог полностью завершить свою задачу.

Я пытаюсь взять ячейку из каждой строки в таблице "a.csv" и затем использовать это значение, чтобы проверить несколько регулярных выражений, и если элемент существует из другой строки в другой электронной таблице "b.csv"

Теперь у меня есть это работает со всеми регулярными выражениями и когда я печатаю данные на экран он отлично работает, показывая мне все данные и выполняя проверки правильно.

Проблема заключается в том, что я не могу взять значение из "b.csv" и применить к "a.csv" внутри l oop и операторы if (только применить значение из "b.csv" к правильной строке в "a.csv")

Вот мой код в настоящее время:

import pandas as pd
import re

df1 = pd.read_csv('a.csv', sep=",")
df2 = pd.read_csv('b.csv', sep=",")

for index, row in df1.iterrows():

    for i, r in df2.iterrows():

        if r['Model'] in row['Title']:

            df1[index, 'Tag'] = r['Tag']
            # if you print df1[index, 'Tag'] HERE it prints the correct tag for each index/row and then possible will continue searching through b.csv with the same index in a.csv which is what i need to do as there may be mutiple of the same.
            # This is the information I need to put in a new row under the index row but currently it only adds to the existing row and then gets wiped after another search.

#if you print df1 here it only applies to a couple of rows and not all of them.
df1.to_csv('a.csv', sep=",", index=False)

A.CSV - Пример данных

IDNumber   Title
1          Vauxhall Astra Model H 92-93
2          VW Golf MK2 GTI 90-91
3          BMW 1 Series 89-93

B.CSV - Пример данных

Manufacturer  Model      Type     Year                        Tag
VW            Golf       MK2      1990|1991|1993              1000
VW            Golf       MK2 GTI  1990|1991|1993              1001
VW            Golf       MK2      1896|1897|1898|1899         1002
Vauxhall      Astra      Model H  1991|1992|1993|1994         1003
BMW           2 Series            2000|2001|2002              1004

A.CSV - ВЫХОД I Требовать

IDNumber   Title                         Tag
1          Vauxhall Astra Model H 92-93
                                         1003
2          VW Golf MK2 GTI 90-91         
                                         1000
                                         1001
3          BMW 1 Series 89-93

Я полагаю, что ошибка связана с вложенным l К сожалению, и как это перебирает данные, но я дергаю себя за волосы. Очень хотел бы получить ответ или руководство, если я пытаюсь сделать это неправильно.

1 Ответ

1 голос
/ 16 апреля 2020

Возможный способ - добавить новую строку в конце кадра данных и сохранить в ней IDNumber. В конце цикла вы можете отсортировать кадр данных по IDNumber и установить его пустым в строках без заголовка. Вот возможный код:

for index, row in df1.iterrows():
    for i, r in df2.iterrows():
        if r['Model'] in row['Title']:
            ix = len(df1)
            df1.loc[ix, 'Tag'] = r['Tag']
            df1.loc[ix, 'IDNumber'] = row['IDNumber']

df1 = df1.sort_values(['IDNumber']).reset_index(drop=True)
df1.loc[df1['Title'].isna(), 'IDNumber'] = ''
df1 = df1.fillna('')

Наконец-то вы получите:

  IDNumber                         Title   Tag
0        1  Vauxhall Astra Model H 92-93      
1                                         1003
2        2         VW Golf MK2 GTI 90-91      
3                                         1000
4                                         1001
5                                         1002
6        3            BMW 1 Series 89-93      

Примечание: вы также получите тег 1002, потому что у этого кода нет проверки на год ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...