数据处理python

1.列筛选

(1)某一列&某几列

对于一个表单里面的数据,如果我们想要对于这个表单里面的数据进行处理,我们可以一列一列进行处理,也可以多列一起进行处理;


一列一列处理:

只需要在这个dataframe变量的后面添加上这个中括号和对应想要处理的索引;

下面的data就是这个里面的dataframe变量,中括号里面的就是对应的列索引,相当于是我们只会打印这个表单里面的第三列的数据;

data = pd.read_csv("/Users/yequ/电商数据清洗.csv")

# 使用print()输出变量data中的 "payment" 列

print(data["payment"])

# TODO 使用print()输出变量data中的 "price" 列

print(data["price"])

# 使用print()输出变量data中的 "cutdown_price" 列

print(data["cutdown_price"])

我们如果想要对于上面的这几列的数据进行运算的话,也是可以一列一列的进行运算的;

例如我们下面进行的运算就是每一列的数据都要除以100;

# 将变量data中的 "payment" 列修改为以元为单位的数据

data["payment"] = data["payment"]/100

# TODO 将变量data中 的 "price" 列修改为以元为单位的数据

data["price"] = data["price"]/100

# 将变量data中的 "cutdown_price" 列修改为以元为单位的数据

data["cutdown_price"] = data["cutdown_price"]/100

# 使用print()输出变量data

print(data)

同样是上面的这个数据表单,我们还可以


多列一起进行处理

这个pandas里面可以使用两个中括号里面套着这些数据,就可以实现多列进行相同处理的效果;

这个里面是一共使用了两个中括号的,第一个中括号就是表示的对于这个data的索引值,第二个表示的就是这个中括号里面的内容就是一个简单的列表,对于这个列表里面的数据进行操作;

# TODO 将变量data中的"payment", "price", "cutdown_price" 这三列修改为以元为单位的数据
data[["payment", "price", "cutdown_price"]] 
= data[["payment", "price", "cutdown_price"]]/100

# 使用print()输出变量data
print(data)

2.按照index访问数据

一行多列,单个多个数据


使用下面的这个表达作为例子,这个时候我们就可以使用.loc加上对应的行索引找到这一行的元素

print(data.loc[3515712])

上面这个代码就会打印输出这个对应的这一行的信息;,包括这个user_id还有这个后面的各种费用都会打印出来;


访问连续的几行:

因为想要打印的这几行数据是连续的,这个时候就可以使用这个冒号运算符,只需要我们输入这个起始位置和终止位置即可;

# 使用print()和.loc属性输出订单号3515712到3515716的数据

print(data.loc[3515712:3515716])

打印不连续的几行:

使用这个两个中括号,把这几行不连续的索引值全部放进去即可;

print(data.loc[[3515714,3601839,3601842]])

访问单个元素:

只需要给出来这个行标和列标,就可以准确的定位到这个数据,并且打印出来;

print(data.loc[3515712,"payment"])

下面介绍的就是iloc属性,这个属性传递进去的参数就是对应的行标,以此来访问这个行数据

iloc属性:按照这个位置访问对应位置上面的数值;

这个访问的权限和上面介绍的都是一样的,但是这个括号里面的内容就不是向上面一样的这个具体的内容,因为我们使用loc属性的时候,传递进去的参数就是这个price这些使用的是表格里面的数据,这个.iloc属性使用的参数就是对应的下标,不需要我们传递具体的数值;

3.布尔索引

(1)这个数据筛选的方式主要是针对于这个大型数据集,我们可以通过这个方式判断这个数据是不是符合条件的;

(2)我们可以使用两个方括号,里面的中括号返回值就是一个series序列,外面的这个中括号使用里面的这个返回的series作为索引就可以得到新的符合条件的系列;

# TODO 使用print()和布尔索引,输出"cutdown_price"这一列值里大于0的行

print(data[data["cutdown_price"]>0])

(3)如果我们想要一次性对于多个条件进行判断是否符合,这个时候就需要使用逻辑运算符,这个里面代表的意义和上面的一样,需要注意的就是这个括号之间的嵌套;

# TODO 使用print()和布尔索引
# 输出"cutdown_price"这一列值里大于0
# 和"post_fee"这一列值里大于0的行数据

print(data[(data["cutdown_price"]>0)&(data["post_fee"]>0)])

4.时间类型和格式转换

(1)字符串类型转换为时间类型并且进行这个筛选:

# TODO 将data中"购药时间"这一列数据从字符串类型转换为日期类型

data["购药时间"]=pd.to_datetime(data["购药时间"])

# TODO 使用布尔索引,筛选出"购药时间"列中月份等于2的数据,并赋值给data_2018_2

data_2018_2=data[data["购药时间"].dt.month==2]

# 使用print()函数输出data_2018_2

print(data_2018_2)

使用的是pd模块去调用这个to_datatime函数,这个函数的参数就是想要进行修改的列,生成的就是事件类型的数据,把这个字符串类型数据转换为时间类型;

筛选就是选出来这个事件类型里面的月份是二月份的,我们依然是使用这个.dt.month属性进行这个判断,把这个符合条件的赋值给一个新的变量,把这个变量打印输出;

(2)格式转换函数

# TODO 使用astype()函数,将data["身份证号"]转换为str类型

data["身份证号"]=data["身份证号"].astype(str)

上面这个代码部分就是把这个身份证号这一列转换为str类型的数据,调用的就是astype函数;