pandas 中DataFrame使用:记录抽取,随机抽样,记录合并,字段合并,字段匹配,数据的简单计算
本文测试使用Pandas使用的是Spyder,python3.6版本,已经安装好pandas包。测试数据已放云盘:链接:https://pan.baidu.com/s/1zozpY2BUTIvEJKf238leZg 密码:44zg。如需按照numpy,可以百度搜索如何安装。
1记录抽取
根据一定的条件,对数据进行抽取。使用函数为:dataframe[condition],其中
condition:过滤条件,返回值为一个DataFrame。常用的条件类型有以下几种。
下图为测试的原始数据:
比较运算:大于(>),小于(<),大于等于,小于等于,不等于,例如:df[df.comments>1000];
#导包
from pandas import read_csv
df=read_csv(r"C:\Users\JackPi\Desktop\pandas\data\data4.csv",sep="|")
newDf=df[df.comments>10000]
结果:
范围运算:between(left,right)(需要注意的是可取到边界值),例如:df[df.comments.between(100,1000)];
#导包
from pandas import read_csv
df=read_csv(r"C:\Users\JackPi\Desktop\pandas\data\data4.csv",sep="|")
newDf=df[df.comments.between(1000,5000)]
结果:
空值匹配:pandas.isnull(column),如:df[pandas.isnull(df.title)];
#导包
import pandas
from pandas import read_csv
df=read_csv(r"C:\Users\JackPi\Desktop\pandas\data\data4.csv",sep="|")
newDf=df[pandas.isnull(df.title)]
结果:
字符匹配:str.contains(patten,na=Flase),例如df[df.title.str.contains(‘台电’,na=False)];
#导包
import pandas
from pandas import read_csv
df=read_csv(r"C:\Users\JackPi\Desktop\pandas\data\data4.csv",sep="|")
newDf=df[df.title.str.contains('台电',na=False)]
df.title.str.contains('台电',na=False)
返回布尔值的一个列。
结果:
逻辑运算:与(&),或(|),取反(not),例如:df[(df.comments>=100)&(df.comments<=200)],这个表达式与df[df.comments.between(100,200)]等价。
import pandas
from pandas import read_csv
df=read_csv(r"C:\Users\JackPi\Desktop\pandas\data\data4.csv",sep="|")
newDf=df[(df.comments>=1000)&(df.comments<=5000)]
结果:
2随机抽样
随机从数据中,按照一定的行数或者比例抽取数据,这里使用numpy函数:numpy.random.randint(start,end,num),其中
start:范围的开始值
end:范围的结束值
number:抽样个数
返回值为:行数的索引值序列
#导包
import pandas
import numpy as np
from pandas import read_csv
df=read_csv(r"C:\Users\JackPi\Desktop\pandas\data\data5.csv")
#获取随机值
r=np.random.randint(0,10,3)
#对行进行切片
newDf=df.loc[r,:]
结果:
3记录合并
将两个结构相同的数据框,合并成一个数据框。使用合并函数:concat([dataFrame1,dataFrame2,…]),返回值为一个DataFrame。
#导包
import pandas
from pandas import read_csv
df1=read_csv(r"C:\Users\JackPi\Desktop\pandas\data\data6.csv")
df2=read_csv(r"C:\Users\JackPi\Desktop\pandas\data\data7.csv")
df3=read_csv(r"C:\Users\JackPi\Desktop\pandas\data\data8.csv")
newDf=pandas.concat([df1,df2,df3])
原始数据集:
合成后数据:
4 字段合并
将同一个数据框中的不同列,进行合并,形成新的列。,返回一个序列。这些序列结构要保持一致。
#导包
from pandas import read_csv
df=read_csv(r"C:\Users\JackPi\Desktop\pandas\data\data9.csv",sep=" ",names=['brand','area','num'])
#如果不转为字符型,回对数据进行求和
df=df.astype(str)
tel=df['brand']+df['area']+df['num']
原始数据
合并后数据:
5字段匹配
将不同结构的数据框,按照一定的条件进行合并。再python中,我们常用merge(x,y,left_on,right_on)进行匹配,其中
x:第一个数据框
y:第二个数据框
left_on:第一个数据框用于匹配的列
right_on:第二个数据框用于匹配的列
返回值为一个DataFrame
#导包
import pandas;
from pandas import read_csv
items=read_csv(r"C:\Users\JackPi\Desktop\pandas\data\data10.csv",sep="|",names=['id','comments','title'])
prices=read_csv(r"C:\Users\JackPi\Desktop\pandas\data\data11.csv",sep="|",names=['id','oldPrice','nowPrice'])
itemPrices=pandas.merge(items,prices,left_on='id',right_on='id')
数据融合前后对比:
6数据的简单计算
通过对字段进行加减乘除等四则运算,计算出来需要的字段。
#导包
import pandas;
from pandas import read_csv
df=read_csv(r"C:\Users\JackPi\Desktop\pandas\data\data12.csv",sep="|")
df['sum']=df.price*df.num
数据计算前后对比