Col*_*ien 3 python null pandas
我有一个比我在这里展示的更大的数据帧,但我想要做的是在一系列中有某些值(甚至更好的整个数据帧)将该值更改为None.我需要这些是None,所以我可以将数据帧写入数据库,它将被识别为null.
series = (['2014/06/05 13:03:56', '2014/07/23 13:03:56', None, '2014/08/21 13:03:56'])
data = pd.DataFrame(series)
0 2014/06/05 13:03:56
1 2014/07/23 13:03:56
2 None
3 2014/08/21 13:03:56
data = pd.to_datetime(data[0], coerce=True)
data
0 2014-06-05 13:03:56
1 2014-07-23 13:03:56
2 NaT
3 2014-08-21 13:03:56
Name: 0, dtype: datetime64[ns]
data = data.map(str)
data
0 2014-06-05 13:03:56
1 2014-07-23 13:03:56
2 NaT
3 2014-08-21 13:03:56
Name: 0, dtype: object
data.replace(to_replace='NaT', value=None)
0 2014-06-05 13:03:56
1 2014-07-23 13:03:56
2 2014-07-23 13:03:56
3 2014-08-21 13:03:56
Name: 0, dtype: object
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,当我尝试替换'NaT'时,数据帧实际上使用前面的值而不是None来填充值.这无济于事,因为它必须是无.在我正在使用的实际数据帧中,这通常会抛出一个类型错误,告诉我我不能用方法键替换None.我在这里使用的是日期时间系列,但实际上我需要的不仅仅是日期时间系列.看起来它应该是熊猫的基本功能,但我找不到答案.
谢谢,科林
首先,你的代码不起作用的原因是那些NaT值不是字符串'NaT',它们是值pd.NaT.但是因为我不认为修复会实际上给你你想要的东西,让我们暂时忽略它.
DataFrame像ndarray它所构建的NumPy一样,Pandas 是一个紧凑的类型化的低级值.这就是它小巧,快速和类型安全的原因.但这本质上意味着它只能存储指定类型的值.而且None不是这种datetime64[ns]类型的价值.
更具体地说,a datetime64[ns]只能保存64位整数,这些整数表示自纪元以来的日期时间为纳秒,并且None不是64位整数.
熊猫确实有一个特殊的价值来处理这个问题,称为NaT"非时间"; 这None是你可以在任何类型的日期时间字段中获得的最接近的东西(就像NaN浮动更熟悉的那样).这就是你已经拥有的.
与此同时,熊猫None在各种不同的地方都有特别的支持,这些地方试图做你经常想要的事情- 存储NaN/NaT/0,或重复最后一个值,或其他各种事情.但是,如果那不是你想要的,那就没什么用了.
如果你真的需要None,唯一的方法是存储正常的盒装Python对象而不是你输入的低级值dtype=object.然后你可以将任何Python值粘贴到任何元素中,None当然包括.
但这样做很大程度上违背了使用Pandas和NumPy的目的.您可能最好使用NaT并更改其余代码 - 要么预期NaT您当前所期望的位置None,要么在提取或打印输出期间DataFrame将NaT值转换为值None.
为了完整起见,如果你想疯了,并没有什么东西定义阻止你optionaldatetime64[ns]D型这就像datetime64[ns]不同之处在于它使用保留的特殊价值NaT是指None代替.或者它甚至可以保留另一个特殊值,或者说一点点,意思是None,而NaT单独留下.无论哪种方式,这将是一个很大的工作,它会彻底打破依赖日期时间算术任何操作(d - NaT == NaT任何d,但是d - None是一个TypeError对任何d...),最终也没有比任何目的,我能想到的包装解决方案更好的…
| 归档时间: |
|
| 查看次数: |
2632 次 |
| 最近记录: |