Python 数据清洗
python 数据清洗主要依赖 pandas 包
同时还需要掌握 python 自身的一些数据结构和编程技巧
在控制台中输入以下命令
pip install pandas
或
python -m pip install pandas
import pandas as pd
# 通过一个列表生成一个 Pandas series
# 创建一个列表
a = [1, 7, 2]
# 调用 pd.Series 函数将 列表转换成 series
myvar = pd.Series(a)
# 查看 生成的 series
print(myvar)
0 1
1 7
2 2
dtype: int64
print(myvar[0])
1
a = [1, 7, 2]
# 创建 label
myvar = pd.Series(a, index = ["x", "y", "z"])
print(myvar)
x 1
y 7
z 2
dtype: int64
#创建一个字典
data = {
# 字典有 2 个元素,分别是 x 和 y
# 每个字典的内容由列表构成
"x": [420, 380, 390],
"y": [50, 40, 45]
}
# 调用 pd.DataFrame 函数将字典转换成 DataFrame(数据集)
df = pd.DataFrame(data)
# 查看 数据集
print(df)
x y
0 420 50
1 380 40
2 390 45
print(df.loc[0])
x 420
y 50
Name: 0, dtype: int64
# 使用一个列表作为索引
print(df.loc[[0, 1]])
x y
0 420 50
1 380 40
data = {
# 字典有 2 个元素,分别是 x 和 y
# 每个字典的内容由列表构成
"x": [420, 380, 390],
"y": [50, 40, 45]
}
df = pd.DataFrame(data, index = ["day1", "day2", "day3"])
print(df)
x y
day1 420 50
day2 380 40
day3 390 45
# 访问给定关键词的行
print(df.loc["day2"])
df = pd.read_csv("./data.csv", header=0)
数据清理意味着修复数据集中的错误数据。
错误数据可能是:
new_df = df.dropna()
默认情况下,dropna()方法返回一个新的DataFrame,不会改变原来的DataFrame。
# inplace 为 True 的话,则会直接从原来的DataFrame 进行操作
df.dropna(inplace = True)
# 例如 -
df.fillna(-, inplace = True)
df["y"].fillna(3, inplace = True)
替换空单元格的常用方法是计算列的平均值、中位数或众数值
Pandas使用mean() median()和mode()方法来计算指定列的值:
x = df["y"].mean()
df["y"].fillna(x, inplace = True)
# 计算中位数
x = df["y"].median()
df["y"].fillna(x, inplace = True)
x = df["y"].mode()[0] # 因为 model() 返回的是一个序列,所以需要额外的加上 [0]
df["y"].fillna(x, inplace = True)
df['z'] = pd.to_datetime(df['z'])
df.dropna(subset=['z'], inplace = True) # subset 为指定列
print(df.duplicated())
df.drop_duplicates(inplace = True)
df.x
df['x']
df[["x","y"]]
df.loc[:,["x","y"]]
df[0:1]
df.loc[0]
df.loc[0,:]
df.loc[0:0,:]
df[0:3]
df.loc[0:3,:] # 或者 df.loc[0:3]
df.iloc[3]
df.iloc[0:2,0:2]
df.iloc[0:2]
df.iloc[0:2,:]
df.iloc[:,1:3]
df.iloc[1,1]
df["y"] > 2.0
df[df["y"] > 2.0]
df["x"].isin([1])
df[df["x"].isin([1])]
pd.concat([df[0:2], df[2:5]], axis=0)
df.loc[:,"x":"y"]
df.loc[:,"z"]
pd.concat([df.loc[:,"x":"y"], df.loc[:,"z"]], axis=1)
df = df.loc[~df.loc[:,"x"].duplicated(),:]
df.iloc[:2,[0,1]]
pd.merge(df.iloc[:2,[0,1]], df.iloc[[0,2],[0,2]], on="x")
pd.merge(df.iloc[:2,[0,1]], df.iloc[[0,2],[0,2]], on="x", how="left") #左侧拼接
pd.merge(df.iloc[:2,[0,1]], df.iloc[[0,2],[0,2]], on="x", how="right")#右侧拼接
pd.merge(df.iloc[:2,[0,1]], df.iloc[[0,2],[0,2]], on="x", how="outer")#外部拼接