python中Pandas模块的使用

Pandas python工具, 以Numpy为基础,主要用于解决数据分析等相关问题,它可以读数据,改数据,甚至画图。
本文主要记录常用问题,本文用的数据集是来自和鲸社区
https://www.kesci.com/mw/dataset/5ee30becb772f5002d75a965/file

读取数据

pandas可以用于读取多种不同类型的数据

data = pd.read_csv("路径,读取CSV文件")
data = pd.read_csv("路径,读取CSV文件")[["line1","line2"....]] 读取指定列的数据

pd.read_json(“读取json,路径”)

读取JSON,如果只有一行需要加lines=True
例子:pd.read_json("../data/user.json",lines=True)

pd.read_table(“路径”)

读取普通文件,默认以 “\t” 为分隔符
例子:pd.read_table("../data/text.txt")
pd.read_table("../data/text.txt",header=0,names=["a"]) head制定行索引,name制定列名

data.loc[行范围,列范围]

限制读取的数据行数以及列,data值得是读取的数据
data2.loc[0:3,"朝向":"建筑年代"]

data.iloc[行索引,列索引]

作用和loc一致,不同的是针对的是行和列的索引
iloc[0:1,:]

data.query(“表达式”)

根据表达式查询数据
data2.query("楼层 == '高层'") 
逻辑运算符号<、 >、|、 &

data.isin([值1,值2])

获取指定值的数据
data2[data2["楼层"].isin(["高层","中层"])]
data[data["age"].isin([18])].head()

数据处理

读取完数据后,需要针对数据进行一系列的清洗转换操作以方便数据运算,这里是个重点

数据的处理包括

转换》》》

这里主要是转换数据类型,转换数据格式

pd.DataFrame(data)

转换数据结构为dataFrame

df.dtypes / data.info()

显示数据类型 / 数据详细信息
name    object		= str
age      int64		= int

astype(“类型”)

转换为对应的数据类型,注意是创建一个新值,并不是在原有基础上做的
data["age"].astype("object")
不过可以采用重新赋值的方式修改原本的值
data["age"] = data["age"].astype("object")

groupby(“line1”)

按照列分组
food.groupby("星级")
这里注意,如果是单纯的分组是不显示效果的,需要结合聚合函数才会有效

print(food.groupby("星级").size())
星级
五星商户      33
准五星商户    132
准四星商户      3
四星商户     131
dtype: int64

如果需要针对分组后的数据进行处理则需要
for index, data in food.groupby(by='星级'):
    # 对不同性别进行分组显示
    print(index)
    print(data)
    print('\n')

修改》》》

修改数据如果只修改一条

data.列名 = 值

修改所有数据,修改所有数据有多种方式,首先可以采用遍历数据的方式获取所有数据,然后再修改

iterrows(),将DataFrame迭代成(index ,series)
for index, row in food.iterrows():
    food.loc[index,"人均价格"] = row["人均价格"].replace("元","")

apply(f) 可以遍历所有数据执行定义的函数,如果有返回值则改变该值,设置axis=1指定每次遍历获取一行数据

声明函数,获得对应列的值删除其中字符并返回
def f1(str):
    return int(str["人均价格"].replace("元",""))

执行完函数后返回新值
data = food.apply(f1,axis=1)

map(f)和apply差不多,不同的是map针对的是一列数据

def f2(str):
    return int(str.replace("元",""))

data = food["人均价格"].map(f2)
除了上面的外还可以用lambda简化
data = food["人均价格"].map(lambda x:int(x.replace("元","")))

除此之外还有很多种方式,这里不再一一描述

合并》》》

合并主要说的是两个数据源根据一个列合并

merge(df1,df2)

pd.merge(数据源1,数据源2,选项=["数据源1列名","数据源2列名"],how="left/right")
on:列名,用于连接的列
how:连接的方式

两个数据源中都有 “店铺ID”
food = pd.read_csv("../../data/A.csv")
address = pd.read_csv("../../data/address.csv")

内连接
result = pd.merge(food,address,on=["店铺ID","店铺ID"])
右连接
result = pd.merge(food,address,how="right",on=["店铺ID","店铺ID"])
左连接
result = pd.merge(food,address,how="right",on=["店铺ID","店铺ID"])

数据可视化

pandas针对于数据可视化进行方法的封装

plot() ,pandas中的画图方法

常用参数如下
x : x轴
y : y轴
kind : 绘图种类
    ‘line’ : line plot (default)#折线图
    ‘bar’ : vertical bar plot#条形图
    ‘barh’ : horizontal bar plot#横向条形图
    ‘hist’ : histogram#柱状图
    ‘box’ : boxplot#箱线图
    ‘kde’ : Kernel Density Estimation plot#Kernel 的密度估计图,主要对柱状图添加Kernel 概率密度线
    ‘density’ : same as ‘kde’
    ‘area’ : area plot#不了解此图
    ‘pie’ : pie plot#饼图
    ‘scatter’ : scatter plot#散点图  需要传入columns方向的索引
    ‘hexbin’ : hexbin plot#不了解此图
grid : 是否有网格

例子
	food["人均价格"].plot(kind="line")
	food["人均价格"][0:10].plot(kind="line")
	后面无非是数据的变化
	food.sort_values(by="人均价格",ascending=False)["人均价格"][0:10].plot(kind="bar",grid=True,y="人均价格")

猜你喜欢

转载自blog.csdn.net/lihao1107156171/article/details/112384789