pandas使用实验


目录
  • 实验一:缺失值分析
    • 实验内容
  • 实验二:异常值处理
    • 实验内容
  • 实验三:一致性分析
    • 实验内容
  • 实验四:值分析
    • 实验内容:
  • 实验五:直方图与频次图分析
    • 实验内容
  • 实验六 :统计分析
    • 实验内容

实验一:缺失值分析

实验内容

  • 生成含有缺失值的数据
  • 对数据集进行缺失值分析
  • 使用删除缺失值的方法处理数据集
点击查看代码
#导入pandas,numpy库,生成一个含有缺失值数据的数据集
import pandas as pd
import numpy as np
data = pd.DataFrame({'name':['张三', '李四', '王五', 'Bob', np,nan], 'age':[np.nan, 18, 30, 20, 25],'id':[1401, 1402, 1403, np.nan, 1405]})
print(data)

#使用isnull()方法查看缺失值,使用any()方法查看含有缺失值的列,使用all()方法查看全部都是缺失值的列
print(data.isnull())
print(data.isnull().any())
print(data.isnull().all())

#处理缺失值
print(data.dropna()) #删除缺失值

实验二:异常值处理

实验内容

  • 生成含有异常值得数据集
  • 对数据进行标准化
  • 对数据进行异常值分析
点击查看代码
# 导入pandas库,并生成一个含有异常值得数据集
import pandas as pd
data = pd.DataFrame({'name':['a', 'b', 'c', 'd', 'e', 'f', 'g'], 'cost':[2, 127, 4, 6, 3, 13, 14], 'sales':[13, 18, 32, 54, 23, 33, 44]})
print(data)
data1 = data.copy() #防止将源数据覆盖,复制一份进行操作
data1['cost'] = (data['cost'] - data1['cost'].mean())/data1['cost'].std()
data1['sales'] = (data['sales'] - data1['sales'].mean())/data1['sales'].std()
#计算两列数据的均值和标准差,对两列进行标准化
print(data1)
print(data[data1['cost'].abs()>2]) #制定一个筛选异常值的标准,对源数据进行筛选

实验三:一致性分析

实验内容

  • 准备三个数据文件,要求有两个文件的内容是完全相同的,第三个是不同的
  • 使用第一个文件分别于第二个和第三个文件进行一致性比较
点击查看代码
#导入hashlib库,比较数据需要用到数据的md5值,因此要将数据转化为md5值
import hashlib
def chick_md5(file):
  md5 = hashlib.md5()
  with open(file, 'rb') as f:
    content = f.read()
    md5.update(content)
  return md5.hexdigest()

实验四:值分析

实验内容:

  • 生成或打开一个含有重复值,空值,零值得数据集
  • 统计重复值,空值,正负值,零值得数量
点击查看代码
import pandas as pd
import fractions
import matplotlib.pyplot as plt
detal = pd.read_csv('train.csv') #读取训练数据
def Parch(strs):
  print('\n' + str(strs) + '列的重复值以及重复的次数')
  strs = strs
  #统计重复值以及重复值出现的次数
  print(data1[strs].value_counts())
#统计在整个数据集中空数据的个数及占比
def nullcounts(strs):
  strs = strs
  count = 0
  for a in data1[strs].isna():
    if a:
      count += 1
  print('\n' + str(strs) + '列数据为空的个数' + str(count) + '\n')
#分别统计正负值和零值
def numbers(strs):
  strs = strs
  Positive = 0
  Negative = 0
  Zero = 0
  for a in data1[strs]:
    if a > 0:
      Positive += 1
    elif a < 0:
      Negative += 1
    elif a == 0:
      Zero += 1
  print(strs + '列正数的个数' + str(Positive) + '\n负数的个数' + str(Negative) + '\n零值得个数' + str(Zero) + '\n')

#遍历类型为字符的列,判断是否有空字符,调用方法对数据进行分析
def nullzifu(strs):
  strs = strs
  count = 0
  for a in data1[strs]:
    if a == "":
      count += 1
  print(strs + '列空字符个数' + str(count))

实验五:直方图与频次图分析

实验内容

  • 生成需要的统计数据
  • 根据数据源绘制直方图
点击查看代码
import matplotlib.pyplot as plt
wages = [3000, 2700, 2800, 2100, 5600, 6700, 4200, 3100, 3500,4100, 5100, 6100, 7600,  7800, 8700, 9800, 10000, 6500, 6000]
wages.sort()
print(wages)
#绘制直方图,使用hist()方法绘制
plt.hist(wages, 18, (2000, 10000), histtype='bar', rwidth = 0.9) #对wages生成直方图
plt.xlabel('wages')
plt.ylabel('count')
plt.title(u'Test')
plt.show()

实验六 :统计分析

实验内容

  • 生成三组数据
  • 使用计算统计量的多种方法计算出每组数据的各种统计量
点击查看代码
import pandas as pd
import numpy as np
np.random.seed(1234)
d1 = pd.Series(2 * np.random.normal(size=100) + 3)
d2 = np.random.f(2, 4, size = 100)
d3 = np.random.randint(1, 100, size=100)
#创建一个方法,生成一个统计量名称和统计量对应的值得二维表
def status(x):
  return pd.Series([x.count[], x.min(), x.idxmin(), x.quantile(.25), x.median(), x.quantile(.75), x.mean(), x,max(), x.idxmax(), x.mad(), x.var(), x.std(), x.skew(), x.kurt()], index = ['总数', '最小值', '最小值位置', '25%分位数', '75%分位数', '均值', '最大值', '最大值位数', '平均值绝对偏差', '方差', '标准差', '偏度', '峰度'])
#将三组数据都进行统计量的计算并打印出一一对应的二维表
df = pd.DataFrame(np.array[d1, d2, d3].T, columns = ['x1', 'x2', 'x3'])
df.head()
print(df.apply(status)) #使用三组数据计算出结果并打印

相关