写在前面:
1.生成一个series:
df = pd.Series(data=[1,2,3,4], index=["a", "b", "c", "d"])
display(df)
print(type(df)) #Series
print(df.loc["b"]) #索引 2
print(df.iloc[1]) #位置 2
2.生成一个DataFrame:
df = pd.DataFrame(np.random.rand(5, 6),
index=["地区1", "地区2", "地区3", "地区4", "地区5"],
columns=["北京","天津", "上海","沈阳", "广州", "长沙"])
display(df)
# 取一列
df["北京"] #Series
# 取一行
df.loc["地区2"]
# 取多行
df.loc[["地区3", "地区4"]]
# 获取多行多列
df[["北京", "长沙"]].loc[["地区3", "地区4"]]
# 一些简单运算
df.max()#默认是取每列中最大的值,对每一列都进行这个聚合函数的操作
# 按行求最大值!
df.max(axis=1)
3.消除警告
import warnings
warnings.filterwarnings("ignore")
4.数据加载:
---csv文件:
df = pd.read_csv('.csv', index_col='id')
df.head()
---excel文件:
df = pd.read_excel('.xlsx',index_col='id')
df.head()
5.保存表格
df.to_csv('name.csv',index=False)
======================================================================
删除:
1.删除列名:
df.drop(['desc,url'],axis=1)
2.删除特定的行:
df.drop(df[df.paymoney<0].index,inplace=Ture) #里面是布尔值
3.删除特定字段中特定的属性:
df.drop(df[df['挂牌价格']=='暂无数据'].index,inplace=Ture)
4.删除特定字段中的空行:
df.drop(df[df['Type'].isnull()].index,inplace=Ture)
======================================================================
查看:
1.整体描述:
df.describe() #对数值类型的数据作基本描述
df.info() #每个字段非空记录数
2.查看某个字段中满足条件的记录数:
df.goodsID[df.goodsID=='PR0000'].size
3.字段太长,显示第一行:
df.iloc[0]
4.数据形状:
df.shape/df.shape[0]/df.shape[1]
======================================================================
重复值:
df.orderID.size #总订单记录
df.orderID.unique().size #没有重复的订单记录
print(df.duplicated().sum())
df[df.duplicated(keep=False)] #具体哪些是重复的
处理:直接删除
df.drop(df[df.orderID.duplicated()].index,inplace=Ture)
======================================================================
缺失值:
统计每列缺失值并加起来:
df.isnull().sum()
处理:
1.直接删除
2.用均值填充:
df['Rating'].fillna(value=df['Rating'].mean(),inplace=Ture)
======================================================================
替换:
replace的使用:
df['size']=df['size'].str.replace('M','e+6')
df['建筑面积']=128.8平米 #去掉单位,并转换成数值类型
df['建筑面积'].str.replace('平米','').astype(float)
======================================================================
分组聚合:
每个种类的的记录数,类似groupby的用法,包括空值的个数,默认不统计空值的记录
df['Category'].value_counts(dropna=False)
统计特定字段特定属性的记录数
df["挂牌价格"][df["挂牌价格"] == "暂无数据"].count()
#统计每个导演的总票房(降序)
group_director=data.groupby('director_name')['gross'].sum().sort_values(ascending=False)
#导演+主演vs票房收入
group_actor = data.groupby(['director_name','actor_1_name'])['gross'].sum().sort_values(ascending=False)
# 内陆城市和临海城市AQI均值对比
data.groupby('Coastal')['AQI'].mean()
# 内陆城市和临海城市AQI箱线图
sns.boxplot(x='Coastal',y='AQI',data=data)
======================================================================
日期的处理:
遇到日期格式的字段(订单日期)改为datetime,可以快速增加数据的维度
如:年,月,季度等(怎么取数)
#将字符串的日期格式转换成时间
df['Order Date'] = pd.to_datetime(df['Order Date'])
df['Order Date']
# print(df.dtypes)
# #拆分成年月 季度
# #每一列就是每一个维度,时间细分
df['Order-year'] = df['Order Date'].dt.year
df['Order-month'] = df['Order Date'].dt.month
df['quarter'] = df['Order Date'].dt.to_period('Q')
df
======================================================================
apply 函数和 map 函数
1.提取字符串作为新的一列:
import pandas as pd
data=['23,哈哈','67,呵呵','09,嘎嘎','39,咔咔']
df=pd.DataFrame(data,index=['a','b','c','d'],columns=['北京市'])
df
series=df['北京市'].str.split(',').apply(lambda x:x[1]) #Series
df.insert(1,'口令',series)
df
2.随机填充日期
import pandas as pd
import random
data=['2010.02','2019.03.4','2018.05','2017.05.8','2014.05']
df = pd.DataFrame(data,
index=["地区1", "地区2", "地区3", "地区4", "地区5"],
columns=["date"])
display(df)
def f(dt):
if len(dt)==7:
return dt +"."+str(random.randint(1,28))
else:
return dt
df['date']=df['date'].apply(f)
display(df)
def time(x):
data=x.split('.')
year=data[0]
month=data[1]
day=data[2]
if len(day)==1:
day='0'+day
return year+'.'+month+'.'+day
else:
return year+'.'+month+'.'+day
df['date']=df['date'].apply(time)
display(df)
3.城市空气质量等级统计
"""
0-50: 一级 ---> 优
51-100: 二级 ---> 良
101-150: 三级 ---> 轻度污染
151-200: 四级 ---> 中度污染
201-300: 五级 ---> 重度污染
>300: 六级 ---> 严重污染
"""
def value_to_level(AQI):
if AQI>=0 and AQI<=50:
return '一级'
elif AQI>=51 and AQI<=100:
return '二级'
elif AQI>=101 and AQI<=150:
return '三级'
elif AQI>=151 and AQI<=200:
return '四级'
elif AQI>=201 and AQI<=300:
return '五级'
else:
return '六级'
level=data['AQI'].apply(value_to_level)
# Series中的每一条记录调用函数,AQI作为实参
# level :323条记录,每个记录属于哪一级
print(level.value_counts()) #每级有多少个城市
sns.countplot(x=level,order=['一级','二级','三级','四级','五级','六级'])
======================================================================
分析
1.空气质量最好的五个城市
t=data[['City','AQI']].sort_values('AQI')
# t=data[['City','AQI']].sort_values('AQI',ascending=False)
t=t.iloc[:5]
display(t)
plt.xticks(rotation=30)
sns.barplot(x='City',y='AQI',data=t)
Pandas笔记2.0
于 2020-09-22 10:33:29 首次发布