1
写在前面
我是从16年开始学习Python的,在使用Python最开始的一段时间,基本是操作list列表和dict字典两个简单的数据结构,后来接触数据的特征越来越多,发现即使是嵌套字典记录数据也很困难,就开始寻求其他的替代方法,于是就发现了很好用的Pandas。
tips:嵌套字典
{'Tom': {'Age': '12', 'Country': 'America'}}
今天主要给大家介绍下Pandas里面DataFrame的简单用法。DataFrame是二维的表格型数据结构,由一维数组Series组成,很多功能与R中的data.frame类似,如果你经常用R做数据分析,应该会对下面的内容感到熟悉。
我觉得不论是学习Python还是其他的什么知识,最快理解的办法就是通过例子来学习,所以我还是用举例子的方法来进行下面的介绍。
2
DataFrame数据结构介绍
以经典的150行5列的鸢尾花数据集为例
数据为5列150行矩阵,5列中包含4个特征:
萼片长宽(SepalLength、SepalWidth)
花瓣长宽(PetalLength、PetalWidth)
以及最后一列花名Name(三种花 'Iris-setosa','Iris-versicolor','Iris-virginica')。
首先导入记录数据的csv文件。
import pandas as pd #导入模块pandasimport numpy as np #导入模块numpydata = pd.read_csv('iris.csv') #导入数据print(data.head()) #输出前五行,见下图
输出后五行
print(data.tail()) SepalLength SepalWidth PetalLength PetalWidth Name145 6.7 3.0 5.2 2.3 Iris-virginica146 6.3 2.5 5.0 1.9 Iris-virginica147 6.5 3.0 5.2 2.0 Iris-virginica148 6.2 3.4 5.4 2.3 Iris-virginica149 5.9 3.0 5.1 1.8 Iris-virginica
输出数据行列数、索引index、列名columns
print(data.shape)(150, 5)
print(data.index)RangeIndex(start=0, stop=150, step=1)
print(data.columns)Index(['SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth', 'Name'], dtype='object')
3
简单操作
统计数据某列中元素种类
data["Name"].unique()array(['Iris-setosa', 'Iris-versicolor', 'Iris-virginica'], dtype=object)
各种类计数:
data["Name"].value_counts()Iris-setosa 50Iris-virginica 50Iris-versicolor 50Name: Name, dtype: int64
数据转置
data.T
选择第一列
data["SepalLength"]#或者data.iloc[:,0]
选择第一行
data.iloc[1]
选择第三到五行,共三行数据:data.iloc[2:5]
SepalLength SepalWidth PetalLength PetalWidth Name2 4.7 3.2 1.3 0.2 Iris-setosa3 4.6 3.1 1.5 0.2 Iris-setosa4 5.0 3.6 1.4 0.2 Iris-setosa
另外loc也可以选取数据,相比iloc只能用数字,loc还可以用字符。
data.loc[2:5,["PetalWidth","Name"]] PetalWidth Name2 0.2 Iris-setosa3 0.2 Iris-setosa4 0.2 Iris-setosa5 0.4 Iris-setosa
快速得到具体位置的值
data.at[100,"PetalLength"]6.0
删除列(对原数据进行增添操作时最好先用copy,避免报出warning)
data2=data.copy()data2.drop("Name",axis=1,inplace=True) #删除列data2.head() SepalLength SepalWidth PetalLength PetalWidth0 5.1 3.5 1.4 NaN1 4.9 3.0 1.4 0.22 4.7 3.2 1.3 0.23 4.6 3.1 1.5 0.24 5.0 3.6 1.4 0.2
删除行
data2.drop(0) SepalLength SepalWidth PetalLength PetalWidth1 4.9 3.0 1.4 0.22 4.7 3.2 1.3 0.23 4.6 3.1 1.5 0.2……
简单对数据进行统计分析
print(data.describe()) SepalLength SepalWidth PetalLength PetalWidthcount 150.000000 150.000000 150.000000 150.000000mean 5.843333 3.054000 3.758667 1.198667std 0.828066 0.433594 1.764420 0.763161min 4.300000 2.000000 1.000000 0.10000025% 5.100000 2.800000 1.600000 0.30000050% 5.800000 3.000000 4.350000 1.30000075% 6.400000 3.300000 5.100000 1.800000max 7.900000 4.400000 6.900000 2.500000
根据第一列升序排序
data.sort_values(by='SepalLength',ascending=True)
第一列中大于第一列均值的所有行数据
data[data["SepalLength"]>data["SepalLength"].mean()]
替换一个位置的元素为空值nan
data.loc[0,"PetalWidth"]=np.nandata.head() SepalLength SepalWidth PetalLength PetalWidth Name0 5.1 3.5 1.4 NaN Iris-setosa1 4.9 3.0 1.4 0.2 Iris-setosa2 4.7 3.2 1.3 0.2 Iris-setosa3 4.6 3.1 1.5 0.2 Iris-setosa4 5.0 3.6 1.4 0.2 Iris-setosa
删除包含有na的行
data.dropna()
删除包含有na的列
data.dropna(axis=1)
0替换na值
data.fillna(0)
生成新的一列
data=data.copy()data["SepalSum"]=data["SepalLength"]+data["SepalWidth"]
改变一列数据的类型(浮点数转为整数)
data["SepalSum"]=data["SepalSum"].astype(int)
完