数据蛙数据分析每周作业Pandas算法小白菜

Pandas入门教程

2019-01-27  本文已影响0人  圆圆KK

NumPy、Pandas、Scipy是python的三个库,也是数据分析的常用库。其中,numpy学习强烈推荐NumPy中文文档。Pandas是基于NumPy的一种工具,数据操作更加方便,这里总结了Pandas的一些教程,更多内容查看官方文档说明

安装包
pip install pandas
载入包
import pandas as pd
创建数组

pandas常用数据结构中,一维Series,二维DataFrame,三维Panel
Series 数据结构与list相似,但只允许存储相同的数据类型,同时,Series可以自定义索引,索引默认从0开始递增。

pd.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
pd.Series(["小兰","女",24,"Beijing"],list("abcd"))

输出:


a 小兰
b 女
c 24
d Beijing
dtype: object


DataFrame 可看做Series组成的字典,通常定义DataFrame可用dict定义,类似于excel和myslq的表格。
pd.DataFrame(data = None, index = None, columns = None, dtype = None, copy = False )

#举例
dict = {"name": ["小兰","小民","小红"],
       "sex":["女","男","女"],
       "age":[24,20,21],
       "city":["Beijing","Beijing","Tianjin"]}
df = pd.DataFrame(dict)

输出:

name sex age city
a 小兰 24 Beijing
b 小民 20 Beijing
c 小红 21 Tianjin

DataFrame还可以通过info直接查看数据类型和统计,dtypes查看数据类型,shape查看形状,describe汇总统计。

df.info()
df.dtypes
df.shape
df.describe()

info()输出如下,可以查看数据类型和数量,空值数量


<class 'pandas.core.frame.DataFrame'>
Index: 3 entries, a to c
Data columns (total 4 columns):
name 3 non-null object
sex 3 non-null object
age 3 non-null int64
city 3 non-null object
dtypes: int64(1), object(3)
memory usage: 120.0+ bytes


增删行列

增加列,和字典操作一样,可以通过直接在后面插入列的方式,另外还可以使用insert函数

pd.DataFrame.insert(loc, column, value, allow_duplicates=False)

df[新增列名] = [内容] #增加列,默认插入到最后一列
#举例
data = [1,1,2]
df.insert(0,"class",data) #loc为指定位置,这里为0,则插入开头
class name sex age city
a 1 小兰 24 Beijing
b 1 小民 20 Beijing
c 2 小红 21 Tianjin

增加行

pd.DataFrame.append(other, ignore_index=False,
verify_integrity=False, sort=None)

#举例
dict_1 = {"class":[2,2],
          "name": ["小新","小花"],
          "sex":["男","女"],
          "age":[19,22],
          "city":["Shanghai","Tianjin"]}
df_1 = pd.DataFrame(dict_1,list("ab"))
df_2 = df.append(df_1,ignore_index=True) #ignore_index为是否重新排序,True重新排序,False则为原本序号
class name sex age city
0 1 小兰 24 Beijing
1 1 小民 20 Beijing
2 2 小红 21 Tianjin
3 2 小新 19 Shanghai
4 2 小花 22 Tianjin

删除行列
删除列,可使用pop()以及del直接删除,删除行列则可以使用drop(),建议使用drop()而不是del,因为drop()不改变原数据,而是重新生成新的数据,同样的还有append()。

pd.DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')#axis = 0表示行,1表示列,默认为0

df.pop("age") #删除并返回age列
del df["age"] #直接删除age列

#举例
df_2.drop(index=[1,2],columns= "city") #表示删除1,2行以及city列
df_2.drop("city",axis=1) #删除city列
df_2.drop([1,2]) #删除1、2行
修改索引

如果需要修改数组的索引,可以使用rename()

pd.DataFrame.rename(mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None)

#举例
df_2.rename({0:"a",1:"b",2:"c",3:"d",4:"e"}) #直接修改,默认修改index
df_2.index=["a","b","c","d","e"] #使用index或columns直接修改会改变原数据,rename()则不改变原数据
df_2.rename(str.upper,axis="columns") #将列名改为大写,axis默认为"index"
df_2.rename(index= lambda x: x+2)  #修改行序号为
df_2.rename(columns={"age":"年龄"}) #修改age列为“年龄”

修改值,可以直接通过

索引和切片

通过索引方式直接选取列,可以使用方括号[ ],也可以直接引用列名。

df_2["age"]
df_2[["age","city"]] #选取多列
df_2.age

行的选取可以通过iloc,loc以及ix,loc是location(位置),iloc的i是integer(整数),从名字就可以看出两者的区别。

df.iloc[1]
df.loc["b"]

两者输出均为一样


class 1
name 小民
sex 男
age 20
city Beijing
Name: b, dtype: object


pandas同样能够进行切片操作,还可以利用iloc方便进行切片操作,可以参考numpy切片

df.iloc[1:3] #等同于df[1:3],df.loc[["b","c"]]
df_2.iloc[1:3]
df_2.loc[1:3]  #当行索引为默认数字时可使用loc,注意loc[1:3]为闭区间,取1,2,3行,区别df_2.iloc[1:3]

通过切片可以方便地批量修改特定位置值,如:
df_2[:4,3]=18
df_2.iloc[1]["age"] =20
可以试试下面的输出的结果

df_2.iloc[:2,:3] 
df_2.iloc[2,3]
df_2.iloc[::2,::3]
df_2.iloc[::-1]
算术运算

和numpy一样,pandas也能对数组进行运算

add(other, axis='columns', level=None, fill_value=None)
类似add()的还有sub(),mul(),div()......分别为加减乘除。

sum(axis=None, skipna=None, level=None, numeric_only=None, min_count=0, **kwargs)
类似sum()的还有max(),min()

a = pd.DataFrame(np.arange(9).reshape(3,3))
b = pd.DataFrame(np.arange(16).reshape(4,4))
#输入代码查看结果
a+b #a.add(b)
a.div(b)
a.add(b, fill_value = 0)
a.add([5,5,6], axis="index")
a.sum()
a.sum(axis=1)
a.max()
查找缺失值

数据常常需要先处理缺失值,再进行数据分析,这里用到fillna()或者replace()替换缺失值,dropna()去除缺失值。

fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad')
dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

c = pd.DataFrame([[np.nan, 2, np.nan, 0],
                   [3, 4, np.nan, 1],
                   [np.nan, np.nan, np.nan, 5],
                   [np.nan, 3, np.nan, 4]],
                  columns=list('ABCD'))
c.fillna(1) #替换空值为1
c.replace(np.nan,1) #同上
c.dropna(axis=1,how = "all") #删除所有值为空值的列,how="any"为任意值为空值,
c.dropna(thresh = 2) #每行只有有2个非空值才保留
c.dropna(subset=["D","A"]) #删除保留A、D列有空值的行
数组合并、连接

数据的合并、连接需要用到merge、join函数

merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)

join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)

apply
merge
join
piot_table
assign
groupby

上一篇下一篇

猜你喜欢

热点阅读