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)
pandas
于 2023-06-21 13:22:02 首次发布
该文详细介绍了如何使用Python的pandas库进行数据读取、查看、描述性统计、缺失值处理、数据清洗以及Series和DataFrame的操作,包括创建、索引、运算、排序和统计等关键步骤。
摘要由CSDN通过智能技术生成