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"]})
我有这个数据框,我想检查每一行和每一列的特定值。例如索引0 有4个值“qwa abc”、“abd xyz”、“abt Rac”、“xyz-0avc”
对于每个值,我要检查xxx-是否有任何数字
例如:
qua abc在第4位有a,所以什么都不要做。当到达xyz-0ac时,位置4处有数字0。因此,它应该运行user define函数,以将整个值(xyz-0vc)替换为user define函数得到的任何值
注意:我尝试运行str.replace,但它只支持特定的用户定义字符串。在这里,用户函数将连接到不同的系统并获得一个字符串。因此它不是预先定义的
这个答案基于@NomadMonad
string_replacer()是一个函数,它将根据满足条件的输入值更改值
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)
如果要更改数据帧中的所有单元格,需要在行轴上使用
pd.apply
,因此自定义函数需要将pd.Series
作为参数之一。在本例中,行是系列此生成器函数迭代行中的每个单元格,检查索引4处的字符是否为数字。如果为true,则返回要替换字符串的值,否则将返回单元格本身的值
然后按行应用自定义函数(
axis=1
),并将其包装在lambda中,这样就可以传递额外的参数(value
,在本例中),然后对函数返回的iterator
调用pd.Series
希望它有意义
您不需要单独的方法,请尝试以下方法:
要在所有列中执行此操作,请执行以下操作:
相关问题 更多 >
编程相关推荐