【发布时间】: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