pandas 中DataFrame使用:数据导入\出,重复值处理,缺失数据处理,字段抽取,字段拆分

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/meiqi0538/article/details/82557879

本文测试使用Pandas使用的是Spyder,python3.6版本,已经安装好pandas包。测试数据已放云盘:链接:https://pan.baidu.com/s/1zozpY2BUTIvEJKf238leZg 密码:44zg。如需按照numpy,可以百度搜索如何安装。

1数据导入

1.1csv数据导入方式:

#导包
from pandas import read_csv

df=read_csv(r"C:\Users\JackPi\Desktop\pandas\data\1.csv",encoding='UTF-8')

数据读入前后比对:

这里写图片描述

这里写图片描述

1.2导入文本文件:

使用read_table函数导入普通文本文件,其中read_able函数语法为:read_table(file,names=[列名1,列名2,…],sep=”“,encoding,..),其中

file: 文本路径

names:列名,默认为文件中的第一行作为列名

sep:分隔符,默认为空,表示默认导入为一列

encoding:设置文件编码,在导入中文的时候需要设置为UTF-8

读取代码:

#导包
from pandas import read_table

df=read_table(r"C:\Users\JackPi\Desktop\pandas\data\2.txt",names=['age','name'],sep=',',encoding='UTF-8')

读入数据前后对比:

这里写图片描述

这里写图片描述

1.3导入Excel文件:

使用read_excel函数导入Excel文件,read_excel函数的语法:read_excel(fileName,sheet_name,names),其中:

fileName:文件路径

sheet_name:Sheet的名字

names:列名,默认为文件中的第一行作为列名

读取代码:

#导包
from pandas import read_excel

df=read_excel(r"C:\Users\JackPi\Desktop\pandas\data\3.xlsx",sheet_name='data')

读取前后数据对比:

这里写图片描述

这里写图片描述

2数据导出

导出为csv文件

使用to_csv函数,语法:to_csv(filePath,sep=”,”,index=TRUE,header=TRUE),其中:

filePath:导出文件的路径

sep:分隔符,默认为逗号(“,”),也就是以逗号分割列

index:是否导出序号,默认为TRUE,也就是导出行序号

header:是否导出列名,默认为TRUE,也就是导出列名

写出代码:

#导包
from pandas import DataFrame

#定义一些数据
df=DataFrame({
        'age':[18,19,20],
        'name':['test1','test2','test3']

        })
#数据导出
df.to_csv(r"C:\Users\JackPi\Desktop\pandas\data\df_out.csv",index=False)

导出结果:

这里写图片描述

3重复值处理

把数据结构中,行相同的数据只保留一行。函数语法:drop_duplicates()

#导包
from pandas import read_csv

df=read_csv(r"C:\Users\JackPi\Desktop\pandas\data\data.csv")

newDf=df.drop_duplicates()

4缺失数据的处理

缺失数据造成的原因:有些洗洗暂时无法获取,有些信息被遗漏或者错误处理了;处理方式:数据补齐,删除对应缺失行,不处理。

删除缺失数据所在行:dropna()函数(去除数据结构中值为空的数据)

#导包
from pandas import read_csv

df=read_csv(r"C:\Users\JackPi\Desktop\pandas\data\data1.csv")

newDf=df.dropna()

5字段抽取

是根据已知数据的开始和结束位置,抽取出新的列,字段截取函数:slice(start,stop),其中:

start:开始位置

stop:结束位置

例如截取电话号码数据:

#导包
from pandas import read_csv

df=read_csv(r"C:\Users\JackPi\Desktop\pandas\data\data2.csv")
#格式转换为字符串类型
df['tel']=df['tel'].astype(str)

#运营商
company=df['tel'].str.slice(0,3)
#运营商
area=df['tel'].str.slice(3,7)
#号码段
nums=df['tel'].str.slice(7,11)

6字段拆分

按照固定的字符,拆分已有字符串。所使用的字符分割函数:split(step,n,expand=False),其中:

sep:用于分割的字符串

n:分割为多少列

expand:是否展开为数据框,默认为False,如果expand为True,则返回DataFrame,如果expand为False,则返回Series。

#导包
from pandas import read_csv

df=read_csv(r"C:\Users\JackPi\Desktop\pandas\data\data3.csv")
#先转为str类型,再用空格隔开,切割1列,也就是分割成2列
newDf=df['name'].str.split(' ',1,True)
#为分割后的数据设置列名
newDf.columns=['band','name']

分割前后数据比较:

这里写图片描述

这里写图片描述

没有更多推荐了,返回首页