Pandas Python проблема со значением соответствия Excel - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть Excel с этими значениями в столбце A:

  A 

первый столбец

0 3971118279

0 397111859

2 397111859

2 790ZR64-60-0

3 790ZR64-60-0

4 V4B7506333

5 V4B7506333

Я читаю с pandas и объединить с openpyxl ячейку especifi c:

df1 = pd.read_excel(Cfijopath, index_col=None )
wb = load_workbook(Cfijopath)
ws = wb.active

for r in df1.index:
    il = df1.iloc[r,0]
    il = str(il)
    if il == 'nan':
        print('NAN')
    else:
        try:
            index = df1.index[df1['first column'] == il].tolist()
            fir = index[0]
            sec = index[-1]
            ws.merge_cells(f'A{fir}:A{sec}')
        except:
            print('error')
wb.save(Cfijopath)

Код работает, но при сравнении первое значение (3971118279) не совпадает. я попытался с:

index = df1.index[df1['first column'] == '3971118279'].tolist()

и не работает.

Это происходит со значениями, которые имеют только цифры, как я могу сравнить, чтобы получить индекс в этих случаях?

Спасибо.

Обновление. Окончательно протестировано только с openpyxl и получилось то же самое. В приведенном ниже коде есть «решение»:

wb = openpyxl.load_workbook(file, read_only=True)
ws = wb.active
for row in ws.iter_rows():
        for cell in row:
            val = str(cell.value)
            if val == "3971118279":
                print(ws.cell(row=cell.row, column=1).row)
                print(type(cell.value))
                print(type(val))

Вывод:

2
<class 'int'>
<class 'str'>
3
<class 'int'>
<class 'str'>

Проблема возникает из-за того, что значение ячейки только с числами считается «int». Решение преобразуется в "str" ​​перед сравнением.

1 Ответ

0 голосов
/ 19 февраля 2020
wb = openpyxl.load_workbook(file, read_only=True)
ws = wb.active
for row in ws.iter_rows():
        for cell in row:
            val = str(cell.value)
            if val == "3971118279":
                print(ws.cell(row=cell.row, column=1).row)
                print(type(cell.value))
                print(type(val))

Output:

2
<class 'int'>
<class 'str'>
3
<class 'int'>
<class 'str'>

Проблема возникает из-за того, что значение ячейки только с числами считается "int". Решение преобразуется в "str" ​​перед сравнением

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