pan*_*nda 11 python csv excel nan pandas
Python版本:Python 2.7.13 :: Anaconda自定义(64位)Pandas版本:pandas 0.20.2
你好,
我有一个非常简单的要求.我想阅读一个excel文件并将特定的表格写入csv文件.编写csv文件时,源Excel文件中的空白值应被视为空白.但是,我的空白记录始终写为输出文件的"nan".(没有报价)
我通过方法读取Excel文件
read_excel(xlsx,sheetname ='sheet1',dtype = str)
我指定dtype因为我有一些数字列但应该被视为字符串.(否则他们可能会丢失前导0等),即我想从每个单元格中读取确切的值.
现在我通过to_csv写出输出.csv文件 (output_file,index = False,mode ='wb',sep =',',encoding ='utf-8')
但是,我的结果csv文件包含来自excel文件的所有空白单元格的nan.
我错过了什么?我已经尝试过.fillna('',inplace = True)函数,但它似乎对我的数据没有任何作用.我还尝试将参数na_rep =''添加到to_csv方法但没有成功.
谢谢你的帮助!
附录:请在下文中找到可重复的示例.
请在下文中找到可重现的示例代码.请首先使用以下内容创建一个包含2列的新Excel文件:COLUMNA COLUMNB COLUMNC 01 test 02 test
03 test
(我将此Excel文件保存到c:\ test.xls请注意,列B的第1行和第3行以及列C的第2行是空白/空)
现在这是我的代码:
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 ='')
Run Code Online (Sandbox Code Playgroud)
我的结果是:
COLUMNA,COLUMNB,COLUMNC
01,nan,test
02,test,nan
03,nan,test
我想要的结果是:
COLUMNA,COLUMNB,COLUMNC
01 ,, test
02,test,
03 ,, test
cs9*_*s95 13
由于您正在处理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
Run Code Online (Sandbox Code Playgroud)
所有'nan'字符串值都将替换为空字符串''.replace不在原位,所以请确保将其分配回来:
df = df.replace('nan', '')
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用它将其写入您的文件to_csv.
如果您实际上想要用空白填充NaN值,请使用fillna:
df = df.fillna('')
Run Code Online (Sandbox Code Playgroud)
replace我遇到了同样的问题,并且或 的选项fillna不起作用。(df.info()显示NaN显示的字段是float64)。这na_filter = False option对我有用。它会像这样工作:
df = pd.read_excel("myexcelfile.xlsx", na_filter = False)
Run Code Online (Sandbox Code Playgroud)
na_filter您可以在 pandasread_excel 文档中阅读有关该选项的更多信息。
小智 5
我遇到了同样的问题,并在 read_excel 中使用了选项 keep_default_na=False 。df = pd.read_excel(内容,sheet_name=sheet,header=[0],keep_default_na=False)
| 归档时间: |
|
| 查看次数: |
16148 次 |
| 最近记录: |