python pandas消除空值和空格以及 Nan数据替换方法
在人工采集数据时,经常有可能把空值和空格混在一起,一般也注意不到在本来为空的单元格里加入了空格。这就给做数据处理的人带来了麻烦,因为空值和空格都是代表的无数据,而pandas中Series的方法notnull()会把有空格的数据也纳入进来,这样就不能完整地得到我们想要的数据了,这里给出一个简单的方法处理该问题。
方法1:
既然我们认为空值和空格都代表无数据,那么可以先得到这两种情况下的布尔数组。
这里,我们的DataFrame类型的数据集为df,其中有一个变量VIN,那么取得空值和空格的布尔数组为NONE_VIN。然后通过该布尔数组,就能得到我们要的数据了
NONE_VIN = (df["VIN"].isnull()) | (df["VIN"].apply(lambda x: str(x).isspace())) df_null = df[NONE_VIN] df_not_null = df[~NONE_VIN]
方法2:
直接使用Series的.apply方法来修改变量VIN中的每个值。如果发现是空格,就返回Nan,否则就返回原值。
df["VIN"]=df["VIN"].apply(lambda x: np.NaN if str(x).isspace() else x) df_null = df[df["VIN"].isnull()] df_not_null = df[df["VIN"].notnull()]
将dataframe中的NaN替换成希望的值
import pandas as pd df1 = pd.DataFrame([{'col1':'a', 'col2':1}, {'col1':'b', 'col2':2}]) df2 = pd.DataFrame([{'col1':'a', 'col3':11}, {'col1':'c', 'col3':33}]) data = pd.merge(left=df1, right=df2, how='left', left_on='col1', right_on='col1') print data # 将NaN替换为None print data.where(data.notnull(), None)
输出结果:
col1 col2 col3 0 a 1 11 1 b 2 NaN col1 col2 col3 0 a 1 11 1 b 2 None
总结:
方法1的思路就是直接判定是否为空格,把空格纳入到选择中来。方法2的思路是先把空格转换为NaN,然后正常使用.isnull()或.notnull()来得到我们想要的数据。
以上这篇python pandas消除空值和空格以及 Nan数据替换方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
python print 按逗号或空格分隔的方法
1)按,分隔 a, b = 0, 1 while b < 1000: print(b, end=',') a, b = b, a+b 1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987, 2)按空格分隔 a, b = 0, 1 while b < 1000: print(b, end=' ') a, b = b, a+b 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 3)print的用法 print(..
-
python在每个字符后添加空格的实例
实例如下所示: #!/usr/bin/env Python # coding=utf-8 file = open("chinese1.txt",'r') file2 = open(r'chinese2.txt', 'w')# 返回一个文件对象 list1= file.readlines() list2 = [] j = -1 for i in list1: j+=1 if j % 3 == 2: list1[j] = ("=== \n") else: list1[j
-
在Python中输入一个以空格为间隔的数组方法
很多时候要从键盘连续输入一个数组,并用空格隔开,Python中的实现方法如下: >>> str_in = input('请以空格为间隔连续输入一个数组:') 然后在键盘中输入比如:123 456 789 111 222 以回车结束输入 得到的str_in为一个字符串,要将其转为一个列表有两种方法 方法一: >>> num = [int(n) for n in str_in.split()] 注意,因为int函数不能对列表操作,只能对的单个字符操作,另外,如果以其他字符为
-
Python脚本处理空格的方法
最近小编遇到一个奇葩问题,就是上传代码时拷贝vs里面的代码不能直接粘贴,否则空格会不符合要求,怎么解决此问题呢?下面小编给大家分享我的解决方案,希望能够帮助到大家! 去掉空格代码 # -*- coding: utf-8 -*- '''打开delSpace.txt文本并删除每行开头的八个空格''' f=open("delSpace.txt") lines=f.readlines() for line in lines: '''第8位至倒数第1位(但不包含它)''' print line[
-
关于Python中空格字符串处理的技巧总结
前言 大家应该都知道字符串处理,是任何语言最常用到的. 其中就经常会碰到,对字符串中的空格处理,比如:去除前后空格,去除全部空格,或者以空格为分隔符来处理. 好在Python中字符串有很多方法,比如lstrip() , rstrip() , strip()来去除字符串前后空格,借助split()对字符来分隔: 实在不行,还可以借助于re模块的sub函数来替换. 下面列举下,各种情况下的处理技巧,通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,话不多说了,来一起看看详细的介绍吧. [
-
python pandas消除空值和空格以及 Nan数据替换方法
在人工采集数据时,经常有可能把空值和空格混在一起,一般也注意不到在本来为空的单元格里加入了空格.这就给做数据处理的人带来了麻烦,因为空值和空格都是代表的无数据,而pandas中Series的方法notnull()会把有空格的数据也纳入进来,这样就不能完整地得到我们想要的数据了,这里给出一个简单的方法处理该问题. 方法1: 既然我们认为空值和空格都代表无数据,那么可以先得到这两种情况下的布尔数组. 这里,我们的DataFrame类型的数据集为df,其中有一个变量VIN,那么取得空值和空格的布尔数组
-
python pandas 对series和dataframe的重置索引reindex方法
reindex更多的不是修改pandas对象的索引,而只是修改索引的顺序,如果修改的索引不存在就会使用默认的None代替此行.且不会修改原数组,要修改需要使用赋值语句. series.reindex() import pandas as pd import numpy as np obj = pd.Series(range(4), index=['d', 'b', 'a', 'c']) print obj d 0 b 1 a 2 c 3 dtype: int64 print obj.reinde
-
python pandas dataframe 按列或者按行合并的方法
concat 与其说是连接,更准确的说是拼接.就是把两个表直接合在一起.于是有一个突出的问题,是横向拼接还是纵向拼接,所以concat 函数的关键参数是axis . 函数的具体参数是: concat(objs,axis=0,join='outer',join_axes=None,ignore_index=False,keys=None,levels=None,names=None,verigy_integrity=False) objs 是需要拼接的对象集合,一般为列表或者字典 axis=0 是
-
基于python 爬虫爬到含空格的url的处理方法
道友问我的一个问题,之前确实没遇见过,在此记录一下. 问题描述 在某网站主页提取url进行迭代,爬虫请求主页时没有问题,返回正常,但是在访问在主页提取到的url时出现了400状态码(400 Bad Request). 结论 先贴出结论来,如果url里有空格的话,要把空格替换成%20,也就是url编码,否则就会出现400. 解决过程 首先百度了一下400状态码什么意思: 400页面是当用户在打开网页时,返回给用户界面带有400提示符的页面.其含义是你访问的页面域名不存在或者请求错误. 主要有两种形
-
python pandas分割DataFrame中的字符串及元组的方法实现
目录 1.使用str.split()方法 2.使用join()与split()方法结合 3.使用apply方法分割元组 1.使用str.split()方法 可以使用pandas 内置的 str.split() 方法实现分割字符串类型的数据,并将分割结果写入DataFrame中,以表格形式呈现. 语法: Series.str.split(pat=None, n=-1, expand=False) 其中,pat是字符串或正则表达式,n是一个整数数字,默认为-1.为0或-1时即为最大次数的分割.其他数
-
Python使用pymysql从MySQL数据库中读出数据的方法
python3.x已经不支持mysqldb了,支持的是pymysql 使用pandas读取MySQL数据时,使用sqlalchemy,出现No module named 'MySQLdb'错误. 安装:打开Windows PowerShell,输入pip3 install PyMySQL即可 import pymysql.cursors import pymysql import pandas as pd #连接配置信息 config = { 'host':'127.0.0.1', 'port'
-
pandas 使用apply同时处理两列数据的方法
多的不说,看了代码就懂了! df = pd.DataFrame ({'a' : np.random.randn(6), 'b' : ['foo', 'bar'] * 3, 'c' : np.random.randn(6)}) def my_test(a, b): return a + b df['Value'] = df.apply(lambda row: my_test(row['a'], row['c']), axis=1) print df 以上这篇pandas 使用apply同时处理两列
-
在python中使用requests 模拟浏览器发送请求数据的方法
如下所示: import requests url='http://####' proxy={'http':'http://####:80'} headers={ "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Encoding": "gzip, deflate, br", "Accept-Lang
-
pandas pivot_table() 按日期分多列数据的方法
如下所示: date 20170307 20170308 iphone4 2 0 iphone5 2 1 iphone6 0 1 先生成DF数据. >>> df = pd.DataFrame.from_dict([['ip4','20170307',1],['ip4','20170307',1],['ip5','20170307',1],['ip5','20170307',1],['ip6','20170308',1],['ip5','20170308',1]]) >>>
随机推荐
- angularjs指令中的compile与link函数详解
- 使用新的消息弹出框blackbirdjs
- 深入理解golang的异常处理机制
- JavaScript弹出对话框的三种方式
- SC tasklist与ntsd命令使用
- iOS获取网络类型的方法汇总
- php INI配置文件的解析实现分析
- JSP中动态include与静态include的区别介绍
- 实例讲解Android多线程应用开发中Handler的使用
- Ubuntu15.10安装docker和docker-compose教程
- XML入门的常见问题(一)
- asp格式化日期时间格式的代码
- Flash ActionScript 中按钮和电影剪辑的事件和方法
- Linux中hostname修改方法详解
- Android获取联系人头像的方法
- C#中事件的动态调用实现方法
- 路由器新技术
- Java SSM框架(Spring+SpringMVC+MyBatis)搭建过程
- Android zip4j压缩、解压、加解密的示例代码
- PHP经典设计模式之依赖注入定义与用法详解