Trying to edit a cell after finding row through user input.
df = pd.read_excel(file)
memory = input("Select Memory : ")
# Match and keep columns
a = df.columns
b = ['IDC S/N', 'ECC', 'Cabinet Qty', 'MMEX', 'VDR']
keep_columns = [x for x in a if x in b]
# Look within IDC S/N for user input
df = df.loc[df.loc[:, 'IDC S/N'].fillna('nan').str.lower().str.contains(memory.lower()), :, ][
keep_columns]
df.reset_index(drop=True, inplace=True)
print(df)
Output :
ECC IDC S/N Cabinet Qty MMEX VDR
0 Yes H532G070S 19 8 0
I would like to edit the Cabinet Qty.
What was tried so far :
df.loc[df.loc[:, "IDC S/N"].fillna('nan').str.lower().str.contains(memory.lower()), :, ]['Cabinet Qty']
Output:
# 19 Equals Cabinet Qty
8 19
Name: Cabinet Qty, dtype: int64
Yet this one throws an error :
S/N"].fillna('nan').str.lower().str.contains(memory.lower()), :, ]['Cabinet Qty'] == ['50']
Output:
raise ValueError(
ValueError: ('Lengths must match to compare', (0,), (1,))
Help will be highly appreciated!
CodePudding user response:
Your solution is possible simplify - removed fillna
, because possible add na
parameter to Series.str.contains
and removed double []
for use DataFrame.loc
:
df.loc[df["IDC S/N"].str.lower().str.contains(memory.lower(), na=False), 'Cabinet Qty'] = 50