pandas

该文详细介绍了如何使用Python的pandas库进行数据读取、查看、描述性统计、缺失值处理、数据清洗以及Series和DataFrame的操作,包括创建、索引、运算、排序和统计等关键步骤。
摘要由CSDN通过智能技术生成
import pandas as pd
#导入数据
data=pd.read_csv(open(r'D:\data.csv'))

#默认查看前5行数据
data.head()

#查看数据的基本情况,包括:count 非空值数、mean 平均值、std 标准差、max 最大值、min 最小值、(25%、50%、75%)分位数等
data.describe() 

#shape查看数据的维度信息
data.shape

#isnull()是判断是否有缺失值、求sum()可知缺失值的总数
data.isnull().sum()

#查缺失值的具体数据
data[data['列名'].isnull()]

#对缺失值直接删除
data=data.dropna()或data.dropna(inplace=True)

#查看非数值型数据有误拼写错误
#unique()是查看唯一值
data['列名'].unique()

#解决方法:
data.loc[data['列名']=='versicolor','列名']='Iris-versicolor'
data['列名'].unique()

#储存清理好的数据
data.to_csv(r'D:\clean_data.csv',index=False)

#pandas
#创建Series数据
obj=pd.Series([1,-2,3,-4],index=['a','b','c','d'])
obj

#值
obj.values

#下标
obj.index

#下标索引取值(两个以上外面多加一个[])
obj['b']

#修改值、增加值
obj['c']=23

#运算直接对obj(Series)操作
obj[obj2<0](值小于0的)
obj*2 (值扩大两倍)

#通过字典创建Series对象(字典是无序的,返回的Series也是无序的)
data={
'张三':92,
'李四':78,
'王五':68,
'小明':82
}
obj=pd.Series(data)
obj

#让Series具有可读性的办法
obj.name='math'
obj.index.name='students'
obj

#创建DataFrame数据
from pandas import Series,DataFrame
data={
'name':['张三','李四','王五','小明'],
'sex':['female','female','male','male'],
'year':[2001,2001,2003,2002],
'city':['北京','上海','广州','北京']
}
df=DataFrame(data)
df

#字典的无序性,可通过指定列索引columns得到要的顺序
df=DataFrame(data,columns=['name','sex','year','city'])
df

指定行索引:
df=DataFrame(data,index=['a','b','c','d'])
df

#使用嵌套的字段创建DataFrame数据:
data={
'sex':{'张三':'female','李四':'female','王五':'male'},
'city':{'张三':'北京','李四':'上海','王五':'广州'}
}
df=DataFrame(data)
df

#重新索引
obj=obj.reindex(['a','b','c','d','e'])
obj

#参数值为ffill或pad时为向前填充
obj1=obj.reindex(range(6),method='ffill')
obj1

#参数值为bfill或backfill时为向后填充
obj1=obj.reindex(range(6),method='bfill')
obj1

#np.arange(9)产生1-8的数字,np.arange(9).reshape(3,3)转换成三行三列的数组
df=DataFrame(np.arange(9).reshape(3,3),index=['a','c','d'],columns=['name','id','sex'])
df
df1=df.reindex(columns=['name','year','id'],fill_value=0)
df1

#更换索引
df1=df.set_index('name')
df1

#与set_index相反的方法是 reset_index(重建索引)
df3=df2.reset_index()
df3

#把原来的索引删除
df2=df1.reset_index(drop=True)
df2

#按列升序排序
df1=df.sort_values(by='grade')
df1

#DataFrame数据的选取
选取列:(返回的是一个Series对象)
df[['city','name']]

#选取行:使用切片来选取行
df2[0:2]
#单独选取某几行
使用loc或者iloc
df.loc[['李四','小明']] 或df2.iloc[[1,3]] 

#列:增加
df['class']=2018 
df
df['math']=[92,78,58,69,82]  
df
#删除
new_df=new_df.drop('列名',axis=1)  
new_df

#行:删除
new_df=df.drop(2)   
new_df

修改:(对行和列索引标签的修改)
new_df.rename(index={3:2,4:3},columns={'math':'Math'},inplace=True)
new_df

#数据对齐是如果有相同的索引则进行相应的运算,否则会以NaN填充
#对于DataFrame数据而言,对齐操作会同时发生过在行和列上
#运算的规律,先通过Series的索引匹配到相应的DataFrame列索引上,
  然后进行广播运算(向下运算作用到每一个数值)

#函数应用和映射
#map函数:将函数套用在Series的每个元素中
def f(x):
    return x.split('元')[0]
df1['price']=df1['price'].map(f)
df1

#apply函数:将函数套用到DataFrame的行与列上
f=lambda x:x.max()-x.min()
df.apply(f)

#applymap函数:将函数套用到DataFrame的每个元素上
df.applymap(lambda x:'%.2f'%x)

#排序
#通过sort_index()、sort_values()分别可以按索引和值排序,
   默认是升序,降序需要设置ascending=Flase

#汇总和统计
#默认按列求和
df.sum()
#按行求和
df.sum(axis=1)
#可对每个数值型列进行统计,常用于数据的初步观察
df.describe()  

#唯一值和值计数
obj.unique()
obj.value_counts()
#二维以上
df['列名'].unique()
df['列名'].value_counts()

#缺失值处理
1.查看数据规模:
   salary.shape
   salary.info()
2.统计有几个缺失的值:
   salary.isnull().sum()
3.样本够多,直接删除
salary=salary.dropna()
salary.isnull().sum()
4.均值填充处理缺失值
5.工资处理:去除“$”符号(str.strip('$')),并将其转换成浮点型(astype(float))
salary['AnnualSalary']=salary['AnnualSalary'].str.strip('$')
salary[['AnnualSalary','GrossPay']].head()
salary['AnnualSalary'].dtype
salary['AnnualSalary']=salary['AnnualSalary'].astype(float)
salary['AnnualSalary'].dtype
6.日期处理
(1)方法1:运用字符串拆分的方法,拆分日期列
salary['HireDate'].str.split('/').head()
salary['month']=salary['HireDate'].str.split('/').str[0]
salary[['HireDate','month']].head()
(2)方法2:日期的处理方式
先将日期转换成datetime类型:Object转datetime方法:使用pd中的to_datetime函数
salary['HireDate']=pd.to_datetime(salary['HireDate'])
salary['HireDate'].dtype
取出月份
import datetime
salary['month']=salary['HireDate'].dt.month
salary['month'].head()

#绘制直方图
hist(bins=20)
#绘制柱状图
plot(kind='barh')

#年薪最高的职务和人数最多的职位
agg_salary=salary.groupby('JobTitle')['AnnualSalary'].agg(['mean','count'])
agg_salary

#对年薪平均值进行降序排序,取前5名绘制柱状图
#方法1:sort_salary=agg_salary.sort_values(by='mean',ascending=False).head()
sort_salary['mean'].plot(kind='bar')
#方法2:sort_salary=agg_salary.sort_values(by='mean',ascending=False)[:5]
sort_salary['mean'].plot(kind='bar')
(对人数将mean改为count)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值