数值分析基础-pandas(2)

1、对以下数据使用pandas进行数据提取或者数据筛选。df=pd.DataFrame({"id":[1001,1002,1003,1004,1005,1006],"date":pd.date_range('20180101', periods=6), "city":['BeiJing', ' ShangHai ','GuangZhou ','ShenZhen ', ' NanJing','ChangZhou'],"age":[-18,20,-28,36,36,152],"category":['2018-A','2018-B' ,'2018-C','2018-D' ,'2018-E','2018-F'],"price":[1200 ,2500,5500,5500,4300,6200]}, columns =['id','date','city','age','category','price'])

aab5e2d542df405ea9acb75c09293cc8.png

(0)数据清洗,对city列中有空格的数据进行去除,对age中的异常值(年龄低于0)替换为当前列中的均值,对price列的数据转为小数格式。

清洗后的数据:

a3c12a9ecf27484bb65a61bf4ed7d5e7.png

代码为:

import numpy as np
import pandas as pd
df['city'] = df['city'].str.strip()
df.loc[df['age']<0,['age']]=df['age'].mean()
df['price']=df['price'].astype(float)
print(df)

942f059504154191b5136876762dc3b8.png

(1)取id、age两列的所有行数据(使用下标[]取值、loc方法取值、iloc方法取值实现)

结果如下图:

56a5b8f79ce04603a0819520ecc1d941.png

代码为:

print(df[['id','age']])

print(df.loc[:,['id','age']])

print(df.iloc[:,[0,3]])

d882b86a0ebf42f2b0a6e2f019b56e26.png

(2)取出年龄在25到45范围的所有数据。

结果截图:

54aff1e497d64fa0abddbc1afdda9cfc.png

代码为:

print(df[(df['age'] < 45) & (df['age'] > 25)])

ad223af5ecf048e491d52f79e72eefde.png

(3)取出年龄大于25,并且价格大于4000的id列数据

结果截图:

7ba4c5b8e5b44939babebf1f566d679f.png

代码为:

print(df.loc[(df['age']>25)&(df['price']>4000),['id']])

c51ea48c2e7a40cd81aca3412e5831db.png

(4)取出价格大于4000或者城市为“ShenZhen”的所有数据,并按照age列中年龄从大到小对所有数据进行排序。

49649f1420164c94afe75549459c1e0a.png

排序后的数据结果:

1de1e807a3754eb19016b3ef8c273641.png

代码为:

print(df[df['price']>4000].sort_values(['age'], ascending = False))

55aeb399cc9342a1b6aa3887a4e0d8c2.png

(5)对(4)题中排序的结果中的第一行行数据进行删除,并对最终结果的索引重置为0,1,2

6bb514fa63d6446f8b27147f80981983.png

代码为:

a.drop(a.index[0],inplace=True)
a=a.reset_index(drop=True)
print(a)

f2d38dc156e94be2b24d24c1dc2fbf6a.png

2、对以下pandas数据进行筛选或者汇总操作

df=pd.DataFrame({"id":[1001,1002,1003,1004,1005,1006],"date":pd.date_range('20180101', periods=6),"city":['BeiJing', ' ShangHai ','GuangZhou ','ShenZhen ', ' NanJing','ChangZhou'],"age":[18,20,28,36,36,52],"category":['2018-A','2018-B' ,'2018-C','2018-D' ,'2018-E','2018-F'],"price":[1200 ,2500,5500,5500,4300,6200]})

 

50353ee3672348ebbf91da0f65df0758.png

(1)数据清洗,对city列中有空格的数据进行去除,并将该列的值转为全部小写。

清洗后的数据下图:

ad7be36f7e2143d59772b5f6b03739b8.png

代码为:

import numpy as np
import pandas as pd
df['city']=df['city'].str.strip()
df['city']=df['city'].str.lower()

aa0d717751d143678fc0a183572399e2.png

(2)数据预处理:将data列的日期类型分别按年、月、日进行拆分并在后面单独生成新的一列。如:拆分年(2018)为单独一列,月(01)为单独一列,日(01)为单独一列。

拆分的结果图如下:

6e301753df924c058c82851216745d0c.png

代码:

new_data = pd.to_datetime(df['date'], format="%y-%m-%d")

df.insert(6, 'day', new_data.dt.day)

df.insert(6, 'month', new_data.dt.month)

df.insert(6, 'year', new_data.dt.year)

7096c8b781484773ae005465e2c31b06.png

 

 

(3)增加一列level,该对age列的数据进行描述,假如年龄大于25则填充为’old’,小于等于25则为‘young’。

9b30d08cbc35426b878131d493656aca.png

代码为:

df.insert(9,'level',0)

df.loc[df['age']>25,['level']]='old'

df.loc[df['age']<=25,['level']]='young'

264f7b006a7248baa420b8646a0de251.png

(4)按age列对所有行数据进行分组并对每个分组进行计数汇总。

882eb8c1fb1f43d9a35b71a93682e5b5.png

代码为:

print(df.loc[:,['age']].value_counts(sort=False))

d0fd8b301bc3405e8b83acf352a1373f.png

(5)按age列对所有行数据进行分组并求不同年龄的price列的总价格和平均价格

3a9ecb4b07584cefa131bc86e25937c7.png

代码为:

print(df.groupby('age')['price'].agg([np.sum,np.mean]))

e453b020995746c09b8f02c67e494304.png

3、读取文件“淘宝某商品所搜结果的数据——原数据.csv”,对该文件进行数据清洗及清洗后的文件保存。该数据表为:

(1)读取文件“淘宝某商品所搜结果的数据——原数据.csv”,使用dataframe对象进行数据封装,并打印该dataframe对象,以及整体的数据描述。

代码为:
 

f65c13054f2140f1ab2d918e9ec008fd.png

import pandas as pd
df=pd.read_csv("D:\subject\大数据\实验报告\实验10-数值分析基础-pandas(2)\淘宝某商品所搜结果的数据——原数据.csv",sep=" ")
df1=df.copy()
print(df)

 

(2)按以下打印的结果对df的行列数据进行存在空值和全为空值的统计。

a2583f18639642999305e9d597c7793c.png

代码为:

h1=df.isnull().any(axis=1).sum()
l1=df.isnull().all(axis=0).sum()
l2=df.isnull().any(axis=0).sum()
h2=df.isnull().all(axis=1).sum()
print("统计数据表中有%d行存在空值,以及%d列数据全为空值" %(h1,l1))
print("统计数据表中有%d列存在空值,以及%d行数据全为空值" %(l2,h2))

 

(3)删除数据表中有两个及其以上空值的数据

删除后的截图:

6557850bcb0e465ab880b53e12c7f119.png

代码为:

df.dropna(axis=0,thresh=2,inplace=True,how='any')

(4)对评论数列的空值填充为0,并评论数列的类型转为整数型。对价格列中的空值填充为该列的平均值。

结果截图:

987c40b0d2a446cc9b5d58373ef4209a.png

代码为:

df['评论数']=df['评论数'].fillna(value=0)
df['评论数']=df['评论数'].astype('int')
df['价格']=df['价格'].fillna(value=df['价格'].mean())
print(df)

 

(5)对店铺名称列内容去除空格,并对有字母开头的内容,要求首字母大写。

结果截图:

1cad743730df4ecfa91530a13906f955.png

 

代码为:

df['店铺名称']=df['店铺名称'].str.strip()
df['店铺名称']=df['店铺名称'].str.title()
print(df)

 

(6)将地址列的数据分别按省、市进行拆分(原数据的省市是字符串类型并用空格隔开)并在后面单独生成新的一列。

拆分的结果图如下:

8427229cb5bf49e0ba6260231dbb68f0.png

代码为:

df['省'],df['市']=df['地址'].str.split(" ",expand=True).values.T

print(df)

 

(7)对付款人数列中的内容截取数字开始的数值,并对该列进行修改,将该列的类型改为整数型。

结果截图:

ad899b903c264ccea91513094fc0b1c9.png

代码为:

df['付款人数']=df['付款人数'].str.extract('(\d+)')
print(df)

 

(7)对数据表按照付款人的从高到低的顺序进行排序。

排序结果截图:

44962cc2e8e5439db282d22c20d6e20a.png

代码为:

df['付款人数']=df['付款人数'].astype('int')
print(df.sort_values(by=['付款人数'],ascending = False))

 

(8)对排序后结果的索引删除,并重置索引从0开始

结果截图:

81488bffdada424b8e7b677a8fe53a1b.png

代码为:

df=df.sort_values(by=['付款人数'],ascending = False)
print(df.reset_index(drop=True))

 

(9)对数据清洗后的数据表格进行保存

代请指正

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值