python提高篇(二)Pandas

数据结构----Series

1.创建Series
import pandas as pd
a = [apple,banana,orange]
myvar = pd.Series(a)
print(myvar)

输出:
在这里插入图片描述
没有指定索引,索引值从0开始,可根据索引值读取数据

print(myvar[1])                 #输出banana
指定索引值
import pandas as pd
a = [apple,banana,orange]
myvar = pd.Series(a,index = ["x","y","z"])
print(myvar)

输出
在这里插入图片描述
利用key/value对象,类似字典来创建Series

import pandas as pd
a = {1:"apple",2:"banana",3:"orange"}
myvar = pd.Series(a)
print(myvar)

在这里插入图片描述

2.Series的访问
import pandas as pd
a = pd.Series([1,2,3,4,5])
print(a[1:4])
print(a[:-1])

结果:
在这里插入图片描述

3.数组间的运算
import pandas as pd
a = pd.Series([1,2,3,4,5])![在这里插入图片描述](https://img-blog.csdnimg.cn/20210518171447443.png)

print(a.mean())
b = pd.Series([2,3,4,5,6])
print(a + b)
print(a * 2)
print(a[a >= 3])

结果:
在这里插入图片描述

数据结构----DataFrame

Pandas DataFrame是一个二维的数组结构,类似于二维数组,表格型的数据结构。

1.创建DataFrame

1)使用列表创建

import pandas as pd
data = [['Tom',11],['Jack',20],['Yan',13]]
df = pd.DataFrame(data,columns=['name','age'],dtype = float)
print(df)

在这里插入图片描述

2)使用ndarry创建

import pandas as pd
data = {'name':['Tom','Jack','Yan'],'age':[11,20,13]}
df = pd.DataFrame(data)
print(df)

3)使用字典创建

import pandas as pd
data = [{'name':'Tom','age':11},{'name':'Jack','age':20},{'name':'Yan','age':13}]
df = pd.DataFrame(data)
print(df)

pandas可以使用loc属性返回指定行的数据,如果没有设置索引,第一行索引为0,第二行索引为1,以此类推…

print(df.loc[0])             #返回第一行
print(df.loc[1])             #返回第二行

输出结果:
在这里插入图片描述

指定索引值
import pandas as pd
data = {"calories":[420,300,280],"duration":[50,40,45]}
df = pd.DataFrame(data, index = ["day1","day2","day3"])
print(df)

结果为:
在这里插入图片描述

print(df.loc["day2"])

在这里插入图片描述

2.数组的运算操作
import pandas as pd
data = {'day1':[1,2],'day2':[3,4]}
a = pd.DataFrame(data)
data1 = {'day1':[1,3],'day2':[1,4]}
b = pd.DataFrame(data1)
print(a + b)
print(a * 2)
print(a > 1)

结果:
在这里插入图片描述

3.DataFrame的查看
df.head()               #查看前面n行的数据,不填则返回前5行
df.info()               #返回DataFrame的信息
df.index                #返回df的索引值
df.columns              #返回df的列名
df.dtypes               #返回df的列数据类型
df.values               #返回df中的数据,返回类型为numpy。ndarray类型
4.groupby操作

groupby表示分组聚合操作,是pandas中常见的操作

df = pd.DataFrame({'key':['A','B','C'],'data':[0,5,10]})
print(df.groupby('key').sum())

在这里插入图片描述

csv文件

读取csv文件

import pandas as pd
df = pd.read_csv('filename.csv')
print(df.to_string())

to_string()用于返回DataFrame类型的数据,若不使用该函数,则输出结果为数据前5行和后5行,其他部分以……代替。

to_csv()
将DataFrame存储为csv文件

import pandas as pd
a = ["tom","jack","mary"]
b = ["boy","boy","girl"]
c = [18,20,17]
#字典
dict = {'name':a,'sex':b,'age':c}
df = pd.DataFrame(dict)
df.to_csv('people.csv')           #保存dataframe

数据读取

import pandas as pd
df = pd.read_csv('filename.csv')
print(df.head())          #读取前面n行,不填则返回5行
print(df.tail())          #读取后面n行,不填则返回5行空行个字段的值返回NaN
print(df.info())          #info返回表格的一些基本信息

数据处理

1.缺失值的检测和处理
df = pd.DataFrame({'c1':[0,1,2,None],'c2':[1,None,2,3]})
print(df)
print(df.isnull())             #有缺返回Ture,不缺返回False
print(df.isnull().sum())       #sum()可得到行和列的缺失值的汇总

在这里插入图片描述

2.填补缺失值
df.fillna(df.mean()        #用平均值填补
df.fillna(1)               #用指定值1填补
df.fillna(method = 'bfill',limit = 1)   #使用缺失值后面的数据填补,limit是限制连续填充,这里选择1表示1列中有多个缺失值相邻时,只填充最近的一个缺失值
df.fillna(method='pad')    #使用缺失值前面的数据填充
3.去除缺失值dropna()函数

当缺失值较少时,可用填充的方式完善数据集,但当缺失值较多且重要程度不高时,可以选择去除这些没有价值的数据。

data.dropna(how = 'all')    # 传入这个参数后将只丢弃全为缺失值的那些行
data.dropna(axis = 1)       # 丢弃有缺失值的列(一般不会这么做,这样会删掉一个特征)
data.dropna(axis=1,how="all")   # 丢弃全为缺失值的那些列
data.dropna(axis=0,subset = ["Age", "Sex"])    #丢弃‘Age’和‘Sex’这两列中有缺失值的行
3.去除异常值

往往根据不同的情况设置不同的条件去除异常值

df = pd.DataFrame({'Name':['A','B','C'],'Age':[-1,20,300]})
print(df)
print(df.query("Age >= 0 and Age <= 110"))

在这里插入图片描述
相互矛盾的数据也视为异常值

data = {'Age':[16,17,20,21],'Age_label':['teen','adult','adult','teen']}
df = pd.DataFrame(data)
data1 = df.query("(Age >= 18 and Age_label == 'adult') or (Age < 18 and Age_label == 'teen')")
print(data1)

在这里插入图片描述

4.去重和冗余信息drop_duplicates
df = pd.DataFrame({'a':[1,1,2,2],'b':[3,3,6,6]})
print(df.drop_duplicates())

在这里插入图片描述
去除指定列

df.drop('b',axis = 1)         #axis=0为行,1为列
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值