2017-11-11 192 views
1

比方说,我有以下的Excel文件来读:大熊猫read_excel:NaN值强迫他人在同一列转换为浮动

enter image description here

我想是一个简单的解决方案(最好是单行),可以读取excel,以便将日期转换为str(或至少int),空白值为nannat或任何可由检测到的内容。

如果我使用df = pd.read_excel(file_path),我所得到的是

df 
Out[8]: 
       001002.XY 600123.AB 123456.YZ 555555.GO 
ipo_date  20100203.0 20150605  NaN 20090501.0 
delist_date   NaN 20170801  NaN   NaN 

所以公认的空白单元格为NaN,这是很好的,但忌讳的是,所有其他值都被迫float64,即使大熊猫他们意图仅仅是strints。 (编辑:似乎如果列,例如列[1],没有nan s,那么其他值将不会被强制为float。但在我的情况下,大多数列有delist_date空白,因为大多数股票有一个IPO日期,但尚未摘牌。)

对于我所知道的,虽然,我试过dtype=str关键字ARG,和它给了我

df 
Out[10]: 
      001002.XY 600123.AB 123456.YZ 555555.GO 
ipo_date  20100203 20150605  nan 20090501 
delist_date  nan 20170801  nan  nan 

看起来不错?确实,日期现在为str,但有一点可笑的是,nan现在变成了文字串!例如。

df.iloc[1, 0] 
Out[12]: 
'nan' 

这将使我不得不添加一些奇怪的东西,如df.replace稍后。

我没有尝试converters,因为它需要逐列指定数据类型,而我正在使用的实际excel文件是一个很长的电子表格(大约3k列)。我不想在excel中转​​换电子表格。

任何人都可以帮忙吗?提前致谢。

+0

我发现了类似的意外行为。我不知道埃弗特对我的问题[这里](https://stackoverflow.com/a/45814200/4799172)的出色答案给出了任何见解。 – roganjosh

+0

@roganjosh谢谢我要检查出来。 – Vim

+0

它绝对是一个切线,但我发现数据类型转换奇怪(从我的情况csv),所以也许它给你另一个角度。 – roganjosh

回答