python - 如何用 None 替换字符串值 - python,pandas dataframe

标签 python pandas null

我有一个比我在这里显示的数据框更大的数据框,但我想做的是,只要系列中存在特定值(甚至更好的是整个数据框),即可将该值更改为“无”。我需要这些为 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

在上面的示例中,当我尝试替换“NaT”时,数据框实际上用前面的值填充该值,而不是“无”。这不会有帮助,因为它需要是“无”。在实际的数据框中,我正在处理的数据通常会抛出一个类型错误,告诉我不能用方法垫替换 None 。我在这里使用日期时间系列,但实际上我需要的不仅仅是日期时间系列。看起来它应该是 pandas 的基本功能,但我找不到答案。

谢谢, 科林

最佳答案

首先,您的代码无法正常工作的原因是这些 NaT 值不是字符串 'NaT',它们是值 pd .NaT。但由于我认为解决这个问题实际上不会给你带来你想要的东西,所以我们暂时忽略它。

Pandas DataFrame,就像它所构建的 NumPy ndarray 一样,是一个类型化的低级值的紧凑数组。这就是它体积小、速度快且类型安全的原因。但这本质上意味着它只能存储指定类型的值。并且 None 不是 datetime64[ns] 类型的值。

更具体地说,datetime64[ns] 只能保存 64 位整数,将日期时间表示为自纪元以来的纳秒,并且 None 不是 64 位整数.

Pandas 确实有一个特殊的值来处理这个问题,称为 NaT,即“Not a Time”;这是您可以在任何类型的日期时间字段中获得的最接近 None 的值(就像更熟悉的浮点型 NaN 一样)。这就是您已经拥有的。

<小时/>

同时,Pandas 在各个不同的地方对 None 提供了特殊支持,尝试执行您经常想要的操作 - 存储 NaN/NaT/0,或重复最后一个值,或其他各种东西。但如果这不是您想要的,那就没有太大帮助。

<小时/>

如果您确实需要 None,唯一的方法是存储普通的装箱 Python 对象,而不是存储键入的低级值,您可以使用 dtype 来实现=对象。然后,您可以将任何 Python 值粘贴到任何元素中,当然包括 None

但是这样做很大程度上违背了使用 Pandas 和 NumPy 的目的。您可能最好使用 NaT,并更改代码的其余部分 - 要么在您当前期望 None 的地方期望 NaT,或者将 DataFrame 包装在提取或打印输出期间将 NaT 值转换为 None 的内容中。

<小时/>

为了完整起见,如果您想变得疯狂,没有什么可以阻止您定义一个 optionaldatetime64[ns] dtype,它就像 datetime64[ns] ,只不过它使用为 NaT 保留的特殊值,表示 None。或者它甚至可以保留另一个特殊值或整个位来表示 None,同时保留 NaT。无论哪种方式,这都将是大量工作,并且它将完全破坏任何依赖于日期时间算术的操作(对于任何 dd - NaT == NaT,但是d - None 是任何 dTypeError...),最终它并不比我能想到的任何目的的包装解决方案更好...

关于python - 如何用 None 替换字符串值 - python,pandas dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29842875/

相关文章:

c - 在c中取消引用空指针

javascript - JS静态文件的管理: code seems to be downloaded but do not work

python - 使用迭代器协议(protocol)访问已排序的字典

python - 如何有效地使用 CountVectorizer 获取目录中所有文件的 ngram 计数?

python - 什么是 "_ipython_canary_method_should_not_exist_"?

python - 如何为 Pandas DataFrame _repr_html_ 方法设置默认样式?

python - 将 geopandas geodataframe 转换为 pandas dataframe

mysql - Sql连接两个表并显示具有空值的表

c# - 反射 GetValue 空属性

python - 使用 pandas DataFrame 将 python 字典导出到 .csv 文件时如何解决(我认为是)编码问题?