在Python的Pandas中,是否有任何方法可以用None替换值?

您可以使用df.replace('pre', 'post')并将其替换为另一个值,但是如果要替换为None值则无法执行此操作,如果尝试这样做,则会得到奇怪的结果。

所以这是一个例子:

df = DataFrame(['-',3,2,5,1,-5,-1,'-',9])

df.replace('-', 0)

返回成功的结果。

但,

df.replace('-', None)

返回以下结果:

0

0   - // this isn't replaced

1   3

2   2

3   5

4   1

5  -5

6  -1

7  -1 // this is changed to `-1`...

8   9

为什么会返回如此奇怪的结果?

由于我想将这个数据框倒入MySQL数据库,所以我不能将NaN值放入数据框的任何元素中,而是想放置None。 当然,您可以先将'-'更改为NaN,然后将NaN转换为None,但是我想知道为什么数据帧以这种可怕的方式起作用。

Tested on pandas 0.12.0 dev on Python 2.7 and OS X 10.8. Python is a

pre-installed version on OS X and I installed pandas by using SciPy

Superpack script, for your information.

write_frame是否不将NaN s解析为none s?

对。 您遇到InternalError: (1054, u"Unknown column nan in field list")错误。 除了执行write_frame方法之前将NaN转换为none之外,我不知道其他解决方案。

您使用的是哪个版本的熊猫?

Scipy Super Pack发布了dev? 好的,我绝对认为您应该在github上将此问题提出来,不应太难解决。

如果要从CSV / Excel读取此数据,则可以使用na_values参数以NaN的形式读取这些值。 此答案中的更多信息。

实际上,在更高版本的熊猫中,这将产生TypeError:

df.replace('-', None)

TypeError: If"to_replace" and"value" are both None then regex must be a mapping

您可以通过传递列表或字典来实现:

In [11]: df.replace('-', df.replace(['-'], [None]) # or .replace('-', {0: None})

Out[11]:

0

0  None

1     3

2     2

3     5

4     1

5    -5

6    -1

7  None

8     9

但我建议使用NaN而不是使用None:

In [12]: df.replace('-', np.nan)

Out[12]:

0

0  NaN

1    3

2    2

3    5

4    1

5   -5

6   -1

7  NaN

8    9

或者只是一个列表,例如我认为df.replace([-], [None])或df.replace({-: None})。将None用作标记也不能将其用作值。

@ user2360798 replace实际上是一个功能非常丰富(读取复杂)的函数,但是(dev)docstring确实很好。

我不知道它是否明显,但必须将df分配回给自己,例如:df = df.replace({?: np.nan})

@AndyHayden df.replace(-, df.replace([-], [None])看起来很时髦,是错字吗?

@lin_bug我认为应该只是df.replace([-],[None]):)不错!

@lin_bug尽管在最近的熊猫版本中似乎不再起作用。 df.where(df!=-,None)工作

我不知道哪个版本的熊猫会返回该错误。我有熊猫0.23.4,对我来说没有TypeError。 pandas显示了@Blaszard解释的行为:vlue是从行之前复制的,而不是设置为None

@raffamaiden df.where(df!=-, None)似乎可以工作,也许是唯一可以工作的人。是的,此答案相当旧(将近6年!我猜想弃用/警告/ TypeError已删除),绝对同意cs95认为应在read_csv期间对其进行解析。

@AndyHayden我同意他的观点,但是,将前一行的值赋给某处没有记录的奇怪行为还是一个错误?

@raffamaiden可能值得创建一个问题,问题是python中的None用于所有可选参数,因此熊猫无法分辨其.replace(x)vs .replace(x,None)...这说起来很奇怪两种行为

where可能正是您要寻找的。所以

data=data.where(data=='-', None)

从熊猫文档:

where [returns] an object of same shape as self and whose corresponding entries are from self where cond is True and otherwise are from other).

简单而精确!谢谢。

这实际上是不准确的。 data = data.where(data ==-,None)会将不等于-的任何内容替换为None。 Pandas版本的where保留第一个arg的值(在这种情况下,data ==-),并用第二个arg替换其他任何内容(在本例中为None)。它与np有点混淆,其中更明确的地方是它在第一个arg中询问条件,然后在第二个arg中询问是否为true,然后在第三个arg中询问是否为false。

我更喜欢将replace与dict结合使用的解决方案,因为它既简单又优雅:

df.replace({'-': None})

您还可以有更多替代品:

df.replace({'-': None, 'None': None})

即使是较大的替换,也总是显而易见的,什么替换了-我认为对于长列表来说,这要困难得多。

Before proceeding with this post, it is important to understand

the difference between NaN and

None.

One is a float type, the other is an object type. Pandas is better

suited to working with scalar types as many methods on these types can

be vectorised. Pandas does try to handle None and NaN consistently,

but NumPy cannot.

My suggestion (and Andy's) is to stick with NaN.

(v0.24 +)更好的CSV / Excel数据解决方案:na_values=['-']

如果您是从CSV / Excel加载此数据的,那么我对您来说是个好消息。您可以在数据加载过程中从根本上解决此问题,而不必在随后的步骤中编写代码修复程序。

大多数pd.read_*函数(例如read_csv和read_excel)接受na_values属性。

file.csv

A,B

-,1

3,-

2,-

5,3

1,-2

-5,4

-1,-1

-,0

9,0

现在,要将-字符转换为NaN,请执行以下操作:

import pandas as pd

df = pd.read_csv('file.csv', na_values=['-'])

df

A    B

0  NaN  1.0

1  3.0  NaN

2  2.0  NaN

3  5.0  3.0

4  1.0 -2.0

5 -5.0  4.0

6 -1.0 -1.0

7  NaN  0.0

8  9.0  0.0

与其他功能/文件格式相似。

附言:在v0.24 +上,即使您的列具有NaN,您也可以保留整数类型(是的,也要谈论吃蛋糕的事情)。您可以指定dtype='Int32'

df = pd.read_csv('file.csv', na_values=['-'], dtype='Int32')

df

A    B

0  NaN    1

1    3  NaN

2    2  NaN

3    5    3

4    1   -2

5   -5    4

6   -1   -1

7  NaN    0

8    9    0

df.dtypes

A    Int32

B    Int32

dtype: object

dtype不是常规的int类型……而是一个Nullable Integer Type。还有其他选择。

处理数值数据:pd.to_numeric与errors='coerce

如果要处理数字数据,则更快的解决方案是将pd.to_numeric与errors='coerce'参数一起使用,这会将无效值(无法转换为数字的值)强制为NaN。

pd.to_numeric(df['A'], errors='coerce')

0    NaN

1    3.0

2    2.0

3    5.0

4    1.0

5   -5.0

6   -1.0

7    NaN

8    9.0

Name: A, dtype: float64

要保留(可为空)整数dtype,请使用

pd.to_numeric(df['A'], errors='coerce').astype('Int32')

0    NaN

1      3

2      2

3      5

4      1

5     -5

6     -1

7    NaN

8      9

Name: A, dtype: Int32

要强制多列,请使用apply:

df[['A', 'B']].apply(pd.to_numeric, errors='coerce').astype('Int32')

A    B

0  NaN    1

1    3  NaN

2    2  NaN

3    5    3

4    1   -2

5   -5    4

6   -1   -1

7  NaN    0

8    9    0

...然后将结果分配回去。

在此答案中可以找到更多信息。

df = pd.DataFrame(['-',3,2,5,1,-5,-1,'-',9])

df = df.where(df!='-', None)

可以使用np.nan设置空值:

import numpy as np

df.replace('-', np.nan)

优点是df.last_valid_index()将它们识别为无效。

python怎么检查dataframe 含有none值_关于python:在Pandas DataFrame中用None替换无效值...相关推荐

  1. python字符串替换空格_python - 用pandas中的NaN替换空白值(空格)

    python - 用pandas中的NaN替换空白值(空格) 我想在Pandas数据帧中找到包含空格(任意数量)的所有值,并用NaN替换这些值. 有什么想法可以改进吗? 基本上我想转此: A B C ...

  2. 如何在R数据帧中用零替换NA值?

    本文翻译自:How do I replace NA values with zeros in an R dataframe? I have a data frame and some columns ...

  3. python一个函数调用另一个函数的返回值_在python函数中使用True,False和None作为返回值...

    建议不是你不应该使用True,False或None.这只是你不应该使用如果x == True. 如果x == True是愚蠢的,因为==只是一个二进制运算符!它的返回值为True或False,取决于它 ...

  4. python 获取唯一值_从Python列表中获取唯一值

    python 获取唯一值 In this article, we will be understanding 3 ways to get unique values from a Python lis ...

  5. python计算派的值_使用 Python 计算 π 值

    π是一个无数人追随的真正的神奇数字.我不是很清楚一个永远重复的无理数的迷人之处.在我看来,我乐于计算π,也就是计算π的值.因为π是一个无理数,它是无限的.这就意味着任何对π的计算都仅仅是个近似值.如果 ...

  6. python从键盘输入一个列表计算输出元素的平均值_python列表查找值_在Python中查找列表平均值的5种方法...

    python列表查找值 Hi Folks! In this article, we will have a look at the various ways to find the average o ...

  7. python基础面试都问什么问题_基本 Python 面试问题

    def Stack(object): def __init__(self): self.stack = [] def push(self,value): # 进栈 self.stack.append( ...

  8. python怎么另起一行阅读答案_一行代码将Pandas加速4倍

    作者:George Seif 编译:ronghuaiyang 导读 虽然Pandas的功能非常强大,但是对于大数据集来说,确实是很慢的. 虽然 panda 是 Python 中用于数据处理的库,但它并 ...

  9. python 预测任意天后股票数据_在Python中使用LSTM进行股票市场预测

    本文概述 在本教程中, 你将看到如何使用称为长短期记忆的时间序列模型. LSTM模型功能强大, 特别是通过设计保留了长期记忆, 这一点将在以后看到.你将在本教程中解决以下主题: 了解为什么你需要能够预 ...

最新文章

  1. 手把手教你安装Flutter(Flutter起步之安装)
  2. MATLAB crc.generato,matlab中CRC的函数使用
  3. SAP BTP 平台 CloudFoundry 环境入门级别的介绍
  4. Gym - 100989J -(DFS)
  5. MaxCompute问答整理之2020-03月
  6. n维数组的操作-04-p2
  7. Linux开发:error: ‘clockid_t’ has not been declared
  8. LeetCode 33——搜索旋转排序数组
  9. (已更新)【全开源商城小程序源码】ThinkPHP 5.1+带后台商城源码程序+带详细安装使用文档
  10. 【第十篇】单点登录原理和JWT实现
  11. 【推荐】PHP各种开源网站系统、cms系统一览[持续更新]
  12. 网吧网管新人对无盘技术不熟
  13. NTFS分区和FAT32分区区别
  14. 罗德里格旋转公式——旋转轴的解法之一
  15. freeswitch阿里云安装配置文档
  16. JVM:(一)JVM与Java体系结构
  17. 【附源码】Python计算机毕业设计美容美发店会员管理系统
  18. 大数据技术助推数字化智慧城市管理平台的搭建
  19. Go语言实战-通过gin上传文件到七牛云OSS
  20. win10 php安装seaslog扩展

热门文章

  1. vcs makefile
  2. 企业级SSD 寿命要怎么看?
  3. 新网银行年营收26亿:净利9亿 远逊色于微众与网商银行
  4. 装修完多久可以入住 新房甲醛一般多久挥发完
  5. linux内存回收(二)--直接内存回收机制
  6. 计算机网络(四)—— 网络层(3):IPv4地址
  7. HTML中添加背景音乐bgsound
  8. 星际2服务器未能成功创建游戏,《星际争霸II》新手错误纠正
  9. January 12th Tuesday 2010
  10. 这些开源项目,你都知道吗?[转载]