【问题标题】:Convert all strings with numbers to integers in DataFrames将所有带数字的字符串转换为 DataFrames 中的整数
【发布时间】:2020-08-03 08:31:43
【问题描述】:

我正在使用带有 openpyxl 的 pandas 将多个 Excel 文件处理为单个 Excel 文件作为输出。在此输出文件中,单元格可以包含数字和其他字符的组合或仅包含数字,并且所有单元格都存储为文本。

我希望将输出文件中仅包含数字的所有单元格存储为数字。由于数字列是已知的(5 到 8),我使用以下代码将文本转换为浮点数:

for dictionary in list_of_Excelfiles
    dictionary[DataFrame][5:8].astype(float)

但是,此手动过程不可扩展,并且当列中存在除数字以外的其他字符时,可能容易出错。因此,我想创建一个语句,将任何只有数字的单元格转换为整数。

什么条件可以过滤只有数字的单元格并将它们转换为整数?

【问题讨论】:

    标签: excel pandas dataframe type-conversion


    【解决方案1】:

    您可以使用 try 和 except 并应用 map,这是一个完整的示例:

    例如创建一些随机数据:

    def s():
        return [''.join(random.choices([x for x in string.ascii_letters[:6]+string.digits], k=random.randint(1, 5))) for x in range(5)]
    df = pd.DataFrame()
    for c in range(4):
        df[c] = s()
    

    定义一个 try 和 except 函数:

    def try_int(s):
        try:
            return int(s)
        except ValueError:
            return s
    

    应用于每个单元格:

    df2 = df.applymap(try_int)
    

    【讨论】:

    • 感谢 Ezer 的解决方案!我认为这将是我寻找的解决方案,但我有点困惑。 try_int 函数需要一个 DataFrame 作为输入变量,对吗?那么如何将其应用于单元级别?
    • 嗨,Ezer,我想我几乎可以让它工作了,但我需要一些额外的帮助。我编写了循环,以便每个单元格都可以通过 Try&Except 函数读取为字符串。但是,我很难将这个函数应用到我的代码中。你能看看上面编辑过的问题吗?
    • 对不起,没有完全理解情况,applymap是一种数据框方法,分别在每个单元格上应用给定的func
    • 我认为这应该起作用,因为循环有助于在单元级别上应用功能。但是,问题在于我们的 try_int 函数之间存在差异。当我使用 try_int(cell_numeric) 时,您不使用输入参数。我应该以不同的方式实现该功能吗?应该改变 cell_numeric 吗?或者您是否看到我在 try_int 函数的实现中遗漏的另一个问题?
    • 这两种方式看起来都是合法的,如果没有看到数据就无法解决你的错误(这并不意味着我一旦看到它就可以),请尝试遵循随机数据示例
    猜你喜欢
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    相关资源
    最近更新 更多