pandas清洗数据常用笔记

read_csv

read_csv header 如果为None 则使用默认列名(指定names)

import pandas as pd
data = pd.read_csv("data/test.csv", header=None)
data.head()

在这里插入图片描述

data = pd.read_csv("data/simple.csv", header=None, names=["用户id", "姓名", "年龄", "性别"])
#drop原始数据中存在的名字
data1 = data.drop(0,axis=0,inplace=False)
data1.head()

在这里插入图片描述
header=0 或者使用默认infer 则使用第一行数据作为列名。

import pandas as pd
data = pd.read_csv("data/test.csv", header=0)
#data = pd.read_csv("data/test.csv"])#默认
data.head()

在这里插入图片描述

选取元素 iloc loc ix

ix DeprecationWarning
iloc 用数字索引
loc 用字符索引
iloc选取多列是不包括后一列 ix loc前后都包括的

#ix iloc loc
# 取一列或多列
data["id"]
data[["id", "name"]]
data.id

#loc使用字符索引
data.loc[1:2, 'id']
data.loc[1:2, ('id', 'name')]

#iloc使用数字索引
data.iloc[1:2, 0]
data.iloc[1:2, 0:2]

data.ix[1:2, 0:2]
创建和删除行和列

创建列assign
创建行concat 合并
横向连接 merge
删除行列 frop

#创建列 
data['number'] = data["id"]
# data.head()
data = data.assign(number = data["id"])
data.head()

#创建列 没有直接添加行操作 可通过连接方式
first = data.iloc[1:5, :]
second = data.iloc[7:8, :]
# concat 也可以横向合并 通过参数axis=0纵向  axis=1横向
out = pd.concat([first, second], ignore_index=True)

first = data.iloc[:, 0:3]
second = data.iloc[:, 0:5]
first.merge(second, how='inner', on='id')
first.head()

#删除列 age列
first = first.drop("age", axis=1)
first = first.drop([1,2], axis=0)
first
查询

多条件 与或非:& | ~
查询语句 query isin between

#data.id > 100048 是一个bool的索引’
# data.id > 100048
# data[data.id > 100048]

#多条件与或非: & | ~ 
# print(data[(data.id > 100048) & (data.age > 40)])

# 条件查询 query isin between等
# data.query('id > 100048')
print(data[data.id.isin([100013, 100015])])
排序

sort_values、sort_index、sortlevel

#sort_index 索引排序 ascending升序倒序
data.sort_index(ascending=False)
# 按照字段的值排序
data.sort_values('age')
分组 groupby agg

agg主要是对列进行操作

#按照gender分组 且求取每个分组中age和id的最大值 
data.groupby("gender")["age", "id"].max()
#按照gender random 分组 并求取每个分组中age的最大值
data.groupby(["gender", "random"])["age"].max()

data['age'].agg(['sum', 'max'])
#这里col是id列 具体是根据agg传入的字段来定的
def get_id(col):
    return col.max()
data.agg({
    'age':['max', 'mean'],
    'random': ['mean'],
    'id': [get_id]
})
# data.groupby("random")["age"].max
绘图
import matplotlib.pyplot as plt
%matplotlib inline
data.plot(x='gender', y=['age'])

在这里插入图片描述

其他常用

drop_duplicates 去重复
apply遍历列
isnull 查看空的数据 fillna填充空数据
to_csv保存

data.duplicated()#查看重复的数据
data.drop_duplicates()#删除重复数据
# data.drop_duplicates("gender")#删除指定列重复的数据

#apply遍历列
def get_random():
    return random.randint(1,3)
data['random'] = data.apply(lambda x: get_random(), axis = 1)

data.name = data.name.fillna('emm.')
# data.head(0)
data.name.isnull()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值