Pandas笔记2.0

写在前面:

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)

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值