Замените значение в .Xlsx, если строка pariculat найдена с использованием Pandas Python - PullRequest
0 голосов
/ 28 мая 2020

У меня есть лист Excel, и я могу получить необходимый блок ячеек, используя приведенный ниже фрагмент кода.

   import pandas as pd

    ENVIRONMENT="SIMM"
    excel_file_name=r'C:\Users\spadravsasthu\Desktop\SVN\HSRI-DEV\TEST\checklist.xlsx'
    workbook_sheet = pd.read_excel(excel_file_name,sheet_name='Sheet1',keep_default_na=False)
    df=pd.DataFrame(workbook_sheet,columns=['Environment', 'Available chunk start value','Available chunk end value'])
df['Available chunk start value'] = np.where((df.Environment == 'SIMM'),
                                             df['Available chunk start value'].str.replace('776021800','123456789'),
                                             df['Available chunk start value'])

Ниже приведен результат df

    Environment Available chunk start value Available chunk end value
   7         SIMM                         NaN                 799900000

Исходные значения были

 Environment Available chunk start value Available chunk end value
       7         SIMM        776021800                  799900000

. Из приведенного выше я хочу изменить 776021800 на 123456789 в фрейме данных, но это делает его как NaN. Любая идея о том, как это можно сделать, используя Pandas!

1 Ответ

1 голос
/ 28 мая 2020

Вы можете использовать np.where для условной замены прямо в исходном фрейме данных, а затем сохранить его в Excel.

df = pd.DataFrame({
    'Environment': ['SIMM', 'notSIMM', 'SIMM'],
    'start_value': ['793951420', '793951420', 'something else']
})

print(df)

  Environment     start_value
0        SIMM       793951420
1     notSIMM       793951420
2        SIMM  something else

ENVIRONMENT = 'SIMM'
df['start_value'] = np.where(df.Environment.str.match(ENVIRONMENT), 
                             df['start_value'].str.replace('793951420','793956789'),
                             df['start_value'])
print(df)

  Environment     start_value
0        SIMM       793956789  <-- only this changed
1     notSIMM       793951420
2        SIMM  something else

Изменить: для вашего конкретного случая c (обратите внимание, это сохраняет вывод в новый лист Sheet2:

import pandas as pd

ENVIRONMENT="SIMM"
excel_file_name=r'C:\Users\spadravsasthu\Desktop\SVN\HSRI-DEV\TEST\checklist.xlsx'
df = pd.read_excel(excel_file_name,sheet_name='Sheet1',keep_default_na=False)
df = df[['Environment', 'Available chunk start value','Available chunk end value']]
df['Available chunk start value'] = np.where(df.Environment.str.match(ENVIRONMENT),
                                             df['Available chunk start value'].str.replace('793951420','793956789'),
                                             df['Available chunk start value'])

with pd.ExcelWriter(excel_file_name, mode='a') as writer:  
    df.to_excel(writer, sheet_name='Sheet2')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...