作业1
任务目标:
• 读取北向.csv 指定 trade_date 为 行索引
• 查看数据的基本信息 有无缺失值 对其缺失值进行处理
• 删除缺失值所在行
• 查看数据的基本信息 查看数据是否清洗完毕
• 标签为 index 这列没啥用 将该列删除
• 观察数据是否有重复行
• 将重复行进行删除
• 将行索引 进行升序
• 将处理好的数据 保存至 北向(副).csv
北向.csv数据文件下载
# -*- coding: utf-8 -*-
"""
Created on Fri Jan 29 10:58:57 2021
@author: 清弦墨客(聆听)
"""
import numpy as np
import pandas as pd
# 读取北向.csv,指定 trade_date为行索引
path = r"D:\Coding\Python\LogicCoding\Data Analyze\北向.csv"
df = pd.read_csv(path, index_col=1)
print(df.shape)
# 查看数据信息
print(df.info())
# 删除index这一列
del df["index"]
# 查看缺失值
print(pd.isnull(df))
# 删除缺失值所在行,默认axis=0,how='any'
df_new = df.dropna()
print(df_new.shape)
# 查看数据是否清洗完毕
print(df_new.info())
# 观察数据是否有重复的行
print(df_new.duplicated())
# 将重复行进行删除,默认保留首次出现的行
df_new = df_new.drop_duplicates()
print(df_new.shape)
# 使用行索引进行升序排列,默认为横轴,默认为升序
# sort_index(axis=0,ascending=True)
df_new = df_new.sort_index()
print(df_new)
# 将清洗后的数据保存到北向(副).csv文件中
path = r"D:\Coding\Python\LogicCoding\Data Analyze\北向(副).csv"
df_new.to_csv(path)
最终处理结果截图:
作业2
任务目标
读取 FoodFacts.csv 数据,该数据是全球食品数据,需分析每个国家添加剂的平均使用。
步骤分析
• 1.读取数据
• 2.数据质量考量
• 3.清洗数据
• 4.对各个国家的使用数量进行统计
• 4.1.清洗,统计国家数据
• 4.2.通过国家统计添加剂用量
• 5.保存统计结果
FoodFacts数据文件下载
# -*- coding: utf-8 -*-
"""
Created on Mon Feb 1 10:16:51 2021
@author: 清弦墨客(聆听)
"""
import numpy as np
import pandas as pd
# 用pandas读取csv文件
path = r"D:\Coding\Python\LogicCoding\Data Analyze\FoodFacts.csv"
df = pd.read_csv(path)
print(df.shape)
# 统计缺失值的数量
#print(pd.isnull(df).sum())
# 只取出“countries_en” 和 “additives_n”两列数据进行统计
# 方法一
df_food = pd.read_csv(path, usecols=["countries_en", "additives_n"])
# 方法二
#df_food = pd.DataFrame(list(zip(df["countries_en"], df["additives_n"])))
#print(df_food)
# 删除缺失值
df_food = df_food.dropna()
print(df_food.shape)
"""
# 在df_food中,的值并不是都只有一个国家,而是像下面这种情况
# Australia,New Zealand,Singapore,Thailand 1
# 这种数据形式为我们统计每个国家食品添加剂的使用情况设置了障碍
# 我们有理由相信,在这种统计情况下,这些国家都使用了相同剂量的添加剂。
# 那么在统计时,这样的数据是不能被随意丢弃的。
# 需要一个不重复的列表或字典,将所有国家食品添加剂的量初始化为0
"""
# 通过split()方法,可以将一行中所有的国家都分离出来
for countries in df_food["countries_en"]:
if len(countries.split(",")) == 1:
pass
else:
for country in countries.split(","):
print(country, end=",")
print()
# 修改上面的方法,得到一个不重复的所有国家的列表
country_names = []
for countries in df_food["countries_en"]:
if len(countries.split(",")) == 1:
if countries not in country_names:
country_names.append(countries)
else:
for country in countries.split(","):
if country not in country_names:
country_names.append(country)
print(len(country_names))
# 得到了100个国家的名字
# 利用字典的特性,统计每个国家的食品添加剂使用数量
additives = {}
# 初始化数量为0
for country_name in country_names:
additives[country_name] = 0
for countries, amount in zip(df_food['countries_en'], df_food['additives_n']):
if len(countries.split(",")) == 1:
additives[countries] += amount
else:
for country in countries.split(","):
additives[country] += amount
print(len(additives))
# 将字典转换为DataFrame ,并保存为文件
# 需要注意默认的保存方式键是作为列名保存,需要修改
df_additives = pd.DataFrame.from_dict(additives, orient='index',columns=['additives'])
df_additives = df_additives.reset_index().rename(columns = {'index':'country_name'})
# 保存为文件
path = r"D:\Coding\Python\LogicCoding\Data Analyze\FoodFacts(new).csv"
df_additives.to_csv(path)