【问题标题】:replace all strings to a default number in DataFrame将所有字符串替换为 DataFrame 中的默认数字
【发布时间】:2026-01-07 06:10:01
【问题描述】:

我有一个数字(int 和 floats)的 pandas DataFrame,它导致所有列的数据类型为 float。我是这么想的。

这些表格是 OCR 扫描到 EXCEL 的结果。在某些情况下,由于扫描错误,存在 ascii 或 word 值。

我如何为所有列、DataFrame 中的所有值执行一揽子 str 值,使其默认为 -999999?

我遇到的问题是 pd.replace() 函数似乎是特定于字符串的。

谢谢!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    请尝试

     df = df.apply(lambda x: pd.to_numeric(x, errors='coerce')).fillna(-999999)
    

    pd.to_numberic 函数会将所有不可解析的字符串转换为“NaN”,而 fillna 会将这些值替换为给定的值“-999999”

    【讨论】:

    • 您可以通过apply 传递关键字参数。所以这应该工作:df.apply(pd.to_numeric, errors='coerce').fillna(-999999)
    • @arcee123,你试过答案了吗?
    • 是的。这似乎异常有效。非常感谢!
    • @arcee123,很高兴知道它按预期工作。感谢您的确认。
    【解决方案2】:

    你也可以在pandas替换方法py中做正则匹配,regex=True

    df.replace("^\w.*$", "-999999", regex=True)
    

    来自熊猫替换功能documentation

    to_replace : str, regex, list, dict, Series, numeric, or None

    str 或正则表达式:

    • str: 与 to_replace 完全匹配的字符串将被替换为 value
    • 正则表达式:匹配 to_replace 的正则表达式将被替换为值

    str、regex 或 numeric 的列表:

    • 首先,如果 to_replace 和 value 都是列表,那么它们的长度必须相同。
    • 其次,如果 regex=True 则两个列表中的所有字符串都将被解释为正则表达式,否则它们将直接匹配。这对于价值来说并不重要,因为您可以使用的可能替换正则表达式很少。
    • str 和 regex 规则应用如上。

    【讨论】:

    • 如果有一个数字值作为字符串,这将不起作用。例如,“1”或“10.05”
    • 你试过了吗,对我来说它适用于任何字符串,无论是字母数字>“abcd123”,整数>“10”,负整数>“-999”,浮点数>“10.03”