[英]check each row and column in dataframe and replace value with user define function
df=pd.DataFrame({'0':["qwa-abc","abd-xyz","abt-Rac","xyz-0vc"],'1':['axc-0aa',"abd-xyz","abt-Rac","xyz-1avc"],
'3':['abc-aaa',"NaN","abt-9ac","xyz-9vc"]})
我有這個 DataFrame,我想檢查每一行和每一列的特定值。 例如索引 0 有 4 個值“qwa-abc”、“abd-xyz”、“abt-Rac”、“xyz-0avc”。
對於我要檢查的每個值是否為 xxx-任何數字xx。
例子:
qua-abc 在 position 4 上有一個,所以什么也不做。 當它到達 xyz- 0 ac 時,在 position 4 處有數字 0。因此它應該運行用戶定義 function 以將整個值(xyz-0vc)替換為用戶定義的任何值 ZC1C425268E683895D1AB45
注意:我嘗試運行 str.replace 但它只支持特定的用戶定義字符串。 這里用戶 function 將連接到不同的系統並獲得一個字符串。 因此它不是預定義的。
如果要更改 Dataframe 中的所有單元格,則需要在行軸上使用pd.apply
,因此您的自定義 function 需要將pd.Series
作為參數之一。 在此示例中,行是系列。
此生成器 function 迭代行中的每個單元格,檢查索引 4 處的字符是否為數字。 如果 true 返回替換字符串的值,否則將返回單元格本身的值。
def replace_value(row, value):
for cell in row:
if pd.notna(cell) and cell[4].isnumeric():
yield value
else:
yield cell
df.apply(lambda x: pd.Series(replace_value(x, 'myvalue')), axis=1)
You then apply your custom function row wise, ( axis=1
) and wrap it in a lambda so you can pass additional arguments ( value
in this case) and then call pd.Series
on the iterator
returned by the function.
希望這是有道理的。
您不需要單獨的方法,試試這個:
In [1200]: df.loc[df['0'].str[4].str.isdigit(), '0'] = 'myvalue'
In [1201]: df
Out[1201]:
0 1 3
0 qwa-abc axc-0aa abc-aaa
1 abd-xyz abd-xyz NaN
2 abt-Rac abt-Rac abt-9ac
3 myvalue xyz-1avc xyz-9vc
In [1242]: def check_digit(cols,new_val):
...: for i in cols:
...: df.loc[(df[i].str[4].str.isdigit()) & (df[i].notna()), i] = new_val
...:
In [1243]: df.apply(lambda x: check_digit(df.columns, 'myval'), 1)
In [1244]: df
Out[1244]:
0 1 3
0 qwa-abc myval abc-aaa
1 abd-xyz abd-xyz NaN
2 abt-Rac abt-Rac myval
3 myval myval myval
這個答案基於@NomadMonad
string_replacer() 是一個 function 將根據滿足條件的輸入值更改值
def replace_value(row, value): for cell in row: try: if pd.notna(cell) and cell[4].isnumeric(): value=string_replacer(cell) yield value else: yield cell except: print(row,value) if_df.apply(lambda x: pd.Series(replace_value(x,value)), axis=1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.