Python Pandas read_excel dtype str 在通过 to_csv 读取或写入时将 nan 替换为空白 ('')

Python Pandas read_excel dtype str replace nan by blank ('') when reading or when writing via to_csv

Python 版本:Python 2.7.13 :: Anaconda 自定义(64 位) Pandas 版本:pandas 0.20.2

您好,

我的要求很简单。 我想读取一个 excel 文件并将特定的 sheet 写入 csv 文件。 在写入 csv 文件时,源 Excel 文件中的空白值应被视为/写入空白。 但是,我的空白记录总是以 'nan' 的形式写入输出文件。 (不带引号)

我通过方法

读取了Excel文件

read_excel(xlsx, sheetname='sheet1', dtype = str)

我指定 dtype 是因为我有一些列是数字但应该被视为字符串。 (否则他们可能会丢失前导 0 等) 即我想从每个单元格中读取确切的值。

现在我通过 to_csv(output_file,index=False,mode='wb',sep=',',encoding='utf-8')

但是,我的结果 csv 文件包含 excel 文件中所有空白单元格的 nan。

我错过了什么?我已经尝试过 .fillna('', inplace=True) 函数,但它似乎对我的数据没有任何作用。 我还尝试将参数 na_rep ='' 添加到 to_csv 方法但没有成功。

感谢您的帮助!

附录:请在下文中找到一个可重现的示例。

请在下文中找到可重现的示例代码。 请先创建一个包含 2 列的新 Excel 文件,内容如下: 专栏 COLUMNB COLUMNC 01测试 02 测试
03 测试

(我把这个Excel文件保存到c:\test.xls 请注意,B 列的第一行和第三行以及 C 列的第二行是 blank/empty)

现在这是我的代码:

import pandas as pd
xlsx = pd.ExcelFile('c:\test.xlsx')
df = pd.read_excel(xlsx, sheetname='Sheet1', dtype = str)
df.fillna('', inplace=True)
df.to_csv('c:\test.csv', index=False,mode='wb',sep=',',encoding='utf-8', na_rep ='')

我的结果是:
COLUMNA、COLUMNB、COLUMNC
01,南,测试
02,测试,南
03,楠,测试

我想要的结果是:
COLUMNA、COLUMNB、COLUMNC
01,测试
02,测试,
03,测试

由于您正在处理 nan 个字符串,您可以使用 replace 函数:

df = pd.DataFrame({'Col1' : ['nan', 'foo', 'bar', 'baz', 'nan', 'test']})
df.replace('nan', '')

   Col1
0      
1   foo
2   bar
3   baz
4      
5  test

所有 'nan' 字符串值将被空字符串 '' 替换。 replace 未就位,因此请确保将其分配回去:

df = df.replace('nan', '')

然后您可以使用 to_csv.

将其写入您的文件

如果您真的想用空白填充 NaN 值,请使用 fillna:

df = df.fillna('')    

我遇到了同样的问题并在 read_excel 中使用了选项 keep_default_na=False。 df = pd.read_excel(内容, sheet_name=sheet, header=[0], keep_default_na=False)