python缺失值
❶ python数据处理:筛选、统计、连表、拼接、拆分、缺失值处理
file1_path ='E:/Users/lenovo/Desktop/中视/622召回.csv' # 源数据
格式:file1=pd.read_csv(file1_path)
pd.read_csv(file1_path,encoding='gbk')
pd.read_csv(file1_path,encoding='gbk',skiprows=[2,3])
pd.read_csv(file1_path,encoding='gbk',skiprows=lambda x:x%2==1)
pd.read_csv(file1_path,encoding='gbk',keep_default_na=False)
new=pd.DataFrame()
new.new[[0,1,2]]
new.new[0:2]
查询结果同上
new.loc[new['激活数']>1000]
loc和iloc的区别:
loc:纯标签筛选
iloc:纯数字筛选
#筛选出new的某两列
new=new.loc[:,['phone','收件人姓名']]
#筛选new的第0,1列
new.iloc[:,[0,1]]
使用‘==’筛选-筛查“崔旭”的人(只能筛查指定明确的)
#new=file1.loc[(file1['收件人姓名']=='崔旭')|(file1['收件人姓名']=='崔霞')]
#print(new)
#使用loc函数筛选-str.contains函数-筛查名字中包含'亮'和'海'的人
#new=file1.loc[file1['收件人姓名'].str.contains('亮|海')]
#print(new)
#使用loc函数筛选-str.contains函数-筛查'崔'姓的人
#new=file1.loc[file1['收件人姓名'].str.startswitch('崔')]
#print(new)
df = df[(df['DEPOSIT_PAY_TIME_x'] .notnull() ) & (df['DEPOSIT_PAY_TIME_x'] != "" )]
print("ring_time(number)=0的个数:",newdata[newdata['ring_time(number)'] ==0].count()['ring_time(number)'])
print("ring_time(number)=1,2,3的个数:",newdata[(newdata['ring_time(number)'] >0) & (newdata['ring_time(number)'] <4)].count()['ring_time(number)'])
print(newdata[newdata['ring_time(number)'] ==0])
newdata[newdata['Team']. isin (['England','Italy','Russia'])][['Team','Shooting Accuracy']]
df.年龄.value_counts()
1.修改指定位置数据的值(修改第0行,’创建订单数‘列的值为3836)
new.loc[0,'创建订单数']=3836
2.替换‘小明’-‘xiaoming’
df.replace({'name':{'小明':'xiaoming'}})
3.批量替换某一列的值(把‘性别’列里的男-male,女-felmale)
方法一:df['性别']=df['性别'].map({'男':'male','女':'female'})
方法二:df['性别'].replace('female','女',inplace=True)
或df['性别']=df['性别'].replace('female','女') 这就是inplace的作用
+df['性别'].replace('male','男',inplace=True)
4.替换列索引
df.columns=['sex','name','height','age']
或者:df.rename(columns={'性别':'sex','姓名':'name','身高':'height','年龄':'age'})
5.删除某一列
del df['player']
6. 删除某一列(方法二),删除某一行(默认axis=0删除行,为1则删除列)
删除某一列(方法二)
df.drop('性别',axis=1)
删除某一行
df.drop(1,axis=0)
file1=pd.read_csv(file1_path)
file2=pd.read_csv(file2_path)
new1=pd.DataFrame()
new1['phone']=file1['phone']
new1['contact_time']=file1['contact_time']
new2=pd.DataFrame()
new2['phone']=file2['phone']
new2['submission_audit_time']=file2['提交审核时间']
newdata=pd.merge(new1,new2,on='phone',how='left')
df=pd.concat([df1,df2],axis=0)
4.2.2 横向表连接
df=pd.concat([df1,df2],axis=1)
df1['地区'].str.split('·',3,expand=True)
df1:
df1[['城市', '城区','地址']] = df1['地区'].str.split('·', 3, expand = True)
5.1 缺失值删除
data.dropna(axis=0,subset = ["Age", "Sex"]) # 丢弃‘Age’和‘Sex’这两列中有缺失值的行
data.dropna(how = 'all') # 传入这个参数后将只丢弃全为缺失值的那些行
data.dropna(axis = 1) # 丢弃有缺失值的列(一般不会这么做,这样会删掉一个特征)
data.dropna(axis=1,how="all") # 丢弃全为缺失值的那些列
5.2 缺失值填充:pandas.DataFrame.fillna()函数
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
功能:使用指定方法填充NA/NaN值
其中inplace=True就是直接在原有基础上填满
5.3 缺失值查询:
缺失值数量查询:df.isnull().sum()
缺失值行查询:df[df.isnull().T.any()]
newdata['ring_time']=pd.to_datetime(newdata['submission_audit_time'])-pd.to_datetime(newdata['contact_time'])
newdata['ring_time(number)']=(pd.to_datetime(newdata['submission_audit_time'])-pd.to_datetime(newdata['contact_time'])).apply(lambda x: x.days)
new=pd.DataFrame()
new=newdata[newdata['ring_time(number)'] ==0]
new.to_csv(save_path,encoding='utf-8-sig')
将数据按行拆分并存储到不同的csv文件中:
path='C:/Users/EDZ/Desktop/工作/2021.08.19/'
for i in range(0,30):
df.loc[[i]].to_csv(path+str(i)+'.csv',encoding='gbk')
df = df[['购药日期', '星期','社保卡号','商品编码', '商品名称', '销售数量', '应收金额', '实收金额' ]]
❷ python中利用pandas怎么处理缺省值
null/None/NaN
null经常出现在数据库中
None是Python中的缺失值,类型是NoneType
NaN也是python中的缺失值,意思是不是一个数字,类型是float
在pandas和Numpy中会将None替换为NaN,而导入数据库中的时候则需要把NaN替换成None
找出空值
isnull()
notnull()
添加空值
numeric容器会把None转换为NaN
In [20]: s = pd.Series([1, 2, 3])
In [21]: s.loc[0] = None
In [22]: s
Out[22]:
0 NaN
1 2.0
2 3.0
dtype: float641234567891012345678910
object容器会储存None
In [23]: s = pd.Series(["a", "b", "c"])
In [24]: s.loc[0] = None
In [25]: s.loc[1] = np.nan
In [26]: s
Out[26]:
0 None
1 NaN
2 c
dtype:
空值计算
arithmetic operations(数学计算)
NaN运算的结果是NaN
statistics and computational methods(统计计算)
NaN会被当成空置
GroupBy
在分组中会忽略空值
清洗空值
填充空值
fillna
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
参数
value : scalar, dict, Series, or DataFrame
method : {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None(bfill使用后面的值填充,ffill相反)
axis : {0 or ‘index’, 1 or ‘columns’}
inplace : boolean, default False
limit : int, default None
downcast : dict, default is None
返回值
filled : DataFrame
Interpolation
replace
删除空值行或列
DataFrame.dropna(axis=0, how=’any’, thresh=None, subset=None, inplace=False)
参数
axis : {0 or ‘index’, 1 or ‘columns’}, or tuple/list thereof
how : {‘any’, ‘all’}
thresh : int, default None
subset : array-like
inplace : boolean, default False
返回
dropped : DataFrame
❸ python dataframe 如何去除缺失值
1、导入需要的库。import pandas as pd,import numpy as np,from sklearn.preprocessing import Imputer。
(3)python缺失值扩展阅读
Python在执行时,首先会将py文件中的源代码编译成Python的byte code(字节码),然后再由Python Virtual Machine(Python虚拟机)来执行这些编译好的byte code。这种机制的基本思想跟Java,NET是一致的。
然而,Python Virtual Machine与Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一种更高级的Virtual Machine。
这里的高级并不是通常意义上的高级,不是说Python的Virtual Machine比Java或.NET的功能更强大;
说和Java 或NET相比,Python的Virtual Machine距离真实机器的距离更远。或者可以这么说,Python的Virtual Machine是一种抽象层次更高的Virtual Machine。
基于C的Python编译出的字节码文件,通常是pyc格式。除此之外,Python还可以以交互模式运行,比如主流操作系统Unix/Linux、Mac、Windows都可以直接在命令模式下直接运行Python交互环境。直接下达操作指令即可实现交互操作。
Python的设计目标之一是让代码具备高度的可阅读性。它设计时尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观。
它不像其他的静态语言如C、Pascal那样需要重复书写声明语句,也不像它们的语法那样经常有特殊情况和意外。
Python开发者有意让违反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯。
并且Python语言利用缩进表示语句块的开始和退出(Off-side规则),而非使用花括号或者某种关键字。增加缩进表示语句块的开始,而减少缩进则表示语句块的退出。缩进成为了语法的一部分。