【问题标题】:Pandas: Convert certain numbers in a dataframe to integerPandas:将数据框中的某些数字转换为整数
【发布时间】:2020-11-05 18:18:29
【问题描述】:

我需要合并多个包含文本和数字的 CSV,并创建一个 Excel 工作簿,每个 CSV 形成一个单独的工作表。虽然它不是严格意义上的数据框,但我还是决定使用 Pandas 库,因为它提供了许多有用的函数来读取和写入 CSV 和 xls 文件。

我正在使用以下代码行来创建写入器对象:

writer = pd.ExcelWriter(filename, engine='openpyxl', mode='a')

现在,当我对单个 CSV 文件执行 read_csv 时,它会将所有内容都读取为字符串,甚至将数字存储为字符串,这会弄乱处理此合并 xlsx 的 TCL 脚本。

df = pd.read_csv(file, header=None, skip_blank_lines=False)

有没有办法在执行 to_excel 之前将这些数字转换为 int?

这里的目的是简单地将所有 CSV 合并到一个 Excel 工作簿中,而不需要修改任何数据。

注意:我知道 xlsxwriter 引擎支持将字符串转换为数字,但我不能使用 xlsxwriter,因为它不支持编辑现有工作簿。

我试过这样做,但没有帮助:

 for col in df:
    df[col] = pd.to_numeric(df[col],errors='ignore') 

编辑:最终,我只是忍受这个问题并在后期处理中处理。没有任何建议(截至 2020 年 7 月)奏效。

【问题讨论】:

  • round(col,0).astype(int) 如果我记得没错。
  • @pinegulf,我试过这个:for col in df: df[col] = df.round(col,0).astype(int) 但我得到了这个错误:ValueError: the 'out' parameter is not supported in the pandas implementation of round()
  • CSV 将所有数据存储为字符串,因此您始终需要进行转换。 Pandas 确实有一些启发式方法可以为您执行此操作,但您应该始终准备好自己执行此操作。使用 openpyxl 直接从 CSV 到 Excel 的 FWIW 将比使用 Pandas 更快。

标签: python excel pandas csv openpyxl


【解决方案1】:

让我换个说法:

如果您指定了包含数值的列,那么这应该会更好(因为它可能是数字或无)。

df.col = pd.to_numeric(df.col)

如果您希望整个 DataFrame 查找数字,那么试试这个

df.col= df.col[df.col.str.isnumeric()].astype('int', errors = 'ignore')

【讨论】:

  • 嗨@ahsen-nazir,我尝试了以下操作:for col in df: df[col] = df[col][df[col].notnull()].astype('int') 但是,我收到了这个错误:ValueError: invalid literal for int() with base 10: 'AAAA' AAAA 是数据框中的第一个元素。
  • df[col]= df[col][df[col].str.isnumeric()].astype('int', errors = 'ignore')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-22
  • 2017-07-16
  • 2020-12-22
  • 2020-03-27
  • 2018-01-18
  • 2022-01-19
  • 2014-08-19
相关资源
最近更新 更多