Pandas数据处理


Pandas是Python的一个数据分析包。

Pands的基本操作

数据结构

	Series用于存储一行或一列的数据,以及与之相关的索引集合。
	DataFrame数据框是用于存储多行和多列的数据集合,是Series的容器。
from pandas import Series
X=Series(['a','b','c'],index=[1,2,3])
#数据追加
y=Series(['2'])
X=X.append(y)
y=Series(['3'],index=[4])
X=X.append(y)
from pandas import DataFrame
X=DataFrame({'age':Series([26,29,24]),'name':Series(['Ken','Jerry','Ben'])},index=[0,1,2])
pandas的数据访问,可以通过X[1:2]指定位置的形式进行。

不同文件类型的数据读取

df=read_table(r'./data/rz.txt',sep="\t")#sep为数据切分类型,可以自己根据数据类型定义
print(df.head(5))#获取前五行

df=read_csv(r'./data/rz.csv',sep=',')
print(df)

df=read_excel(r'./data/i_nuc.xls',sheet_name='Sheet3')
print(df.head())

import pandas as pd
from sqlalchemy import create_engine

#user:用户名,password:密码,host:IP,port:端口,databasename:数据库名,
engine=create_engine("mysql+pymysql://user:password@host:port/databasename?charset=utf8")
df=pd.read_sql('table_name',engine)

不同文件类型的数据导出

engine=create_engine("mysql+pymysql://user:password@host:port/databasename?charset=utf8")
df=DataFrame({'age':Series([26,29,24]),'name':Series(['Ken','Jerry','Ben'])},index=[0,1,2])
df.to_csv('out.csv',index=False)#False表示无indx
df.to_excel('out.xls',index=False)#False表示无indx
df.to_sql(name='table_name',con=engine,if_exists='append',index=False,index_label=False)

数据清洗

df=DataFrame({'age':Series([26,85,64,85,85]),'name':Series(['Ben','John','Jerry','John','John'])})
result=df.duplicated()#布尔类型,重复的为True
result=df.duplicated('name')#布尔类型,重复为True
result=df.drop_duplicates('age')#去除重复的数据

df=read_excel(r'./data/rz.xlsx',sheet_name='Sheet2')
print(df.isnull())#空为True
print(df.notnull())#空为False
print(df.dropna())#去除数据中值为空的数据
print(df.fillna(0))#用其他数据代替NaN
print(df.fillna(method='pad'))#用前一个数据代替NaN
print(df.fillna(method='bgill'))#用后一个数据代替NaN
print(df.fillna(df.mean()))#用均值代替NaN

df=DataFrame({'age':Series([26,85,64,85,85]),'name':Series(['Ben','John','Jerry','John','John'])})
print(df)
print(df['name'].str.strip('n'))#清除字符型数据左右指定的字符,默认为空格

数据抽取

df=read_excel(r'./data/i_nuc.xls',sheet_name='Sheet4')
df['电话']=df['电话'].astype(str)#astype数据类型转换
bands=df['电话'].str.slice(0,3)#抽取固定位置的部分数据

result=df['IP'].str.split('.',1,True)#对数据按照设定字符进行切分;1为切分点数;True为分开打印,False则在一个数组里面
result.columns=['IP1','TP2-4']#对每一列进行名称设置

重置索引

重置索引是指指定某列为索引,以便于对其他数据进行操作。
df.set_index('列名')

记录抽取

按条件对数据进行抽取
df[condition]
condition表示过来条件,返回DataFrame

随机抽样

df.loc[r,:]
r=numpy.random.randint(0,10,3)
df.loc[1]#抽取index等于1的行
df.loc[[1,2],:]#抽取两行

字典数据处理

d=dict(A=np.array([1,2]),B=np.array([1,2,3,4]))
print(DataFrame(dict([(k,Series(v)) for k,v in d.items()])))

数据修改

df.replace('A','B')#通B替换A,其他数值类似
df.replace({'体育':'作弊'},0)#指定列值替换
df.replace(['成龙','周一'],['陈龙','周易'])#数组对应替换,换成{}字典形式的值也一样

交换行列:df.reindex()#默认行[3,2,1],columns=[3,2,1]为列
重新排序:sort_index()
重新索引:reindex()
重置索引:set_index()
还原索引:reset_index()

数据合并

将两个数据合并:pd.concat([df1,df2])
字段合并:df['test']=df['1']+df['2']+df['3']
数据拼接:df=pd.merge(df1,df2,left_on='Test',right_on='Test'),需要两个数据表都具有相同的数据

数据合并

数据计算:首先确定数据类型df['Test'].astype(int)将指定Test列的数据转为int类型,转化后的数据可以直接进行操作。
数据标准化:
min-max标准化:(df.分数.astype(int)-df.分数.astype(int).min())/(df.分数.astype(int).max()-df.分数.astype(int).min())
Z-score标准化:(x-所有样本均值)/所有样本的标准差,可以使用sklearn.preprocessing.scale()函数实现

时间格式转换

时间戳转为指定格式日期(time.time()获取当前系统时间):
result=time.strftime("%Y--%m--%d %H:%M:%S", time.localtime(time.time()))
2020-10-30 15:24:15
日期转换为时间戳:
2020-10-30 15:24:15
result = time.strptime(str(result),"%Y-%m-%d %H:%M:%S")
result=int(time.mktime(result))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值