我有一个数字的pandas DataFrame(int和float)导致所有列的数据类型为float。或者我想。
这些表是OCR扫描到EXCEL的结果。在某些情况下,由于扫描不良,会出现ascii或word值。
如何为所有列执行全局str值到默认值-999999,DataFrame中的所有值?
我遇到的问题是pd.replace()函数似乎是特定于字符串的。
谢谢!
答案 0 :(得分:4)
请尝试
df = df.apply(lambda x: pd.to_numeric(x, errors='coerce')).fillna(-999999)
pd.to_numberic函数会将所有不可解析的字符串转换为' NaN'并且fillna用给定值替换这些值' -999999'
答案 1 :(得分:0)
你也可以在pandas替换方法py传递中进行正则表达式匹配, regex = True
df.replace("^\w.*$", "-999999", regex=True)
从pandas替换函数documentation:
to_replace:str,regex,list,dict,Series,numeric或None
str或regex:
- str:完全匹配to_replace的字符串将替换为值
- 正则表达式:匹配to_replace的正则表达式将替换为值
str,regex或numeric列表:
- 首先,如果to_replace和value都是列表,则它们的长度必须相同。
- 其次,如果 regex = True ,则两个列表中的所有字符串都将被解释为正则表达式,否则它们将直接匹配。这对于值来说并不重要,因为您可以使用几个可能的替换正则表达式。
- str和regex规则如上所述适用。