# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# ## Panda 数据分析常用函数（上）

# ### 1. 导入模块

import pandas as pd
import numpy as np

# ### 2. 创建数据集并读取
# **创建数据集**

data = pd.DataFrame({
    "id":np.arange(101,111),                                # np.arange会自动输出范围内的数据，这里会输出101~110的id号。
    "date":pd.date_range(start="20200310",periods=10),      # 输出日期数据，设置周期为10，注意这里的周期数应该与数据条数相等。
    "money":[5,4,65,-10,15,20,35,16,6,20],                  # 设置一个-10的坑，下面会填（好惨，自己给自己挖坑，幸亏不准备跳~）
    "product":['苏打水','可乐','牛肉干','老干妈','菠萝','冰激凌','洗面奶','洋葱','牙膏','薯片'],
    "department":['饮料','饮料','零食','调味品','水果',np.nan,'日用品','蔬菜','日用品','零食'],                # 再设置一个空值的坑
    "origin":['China',' China','America','China','Thailand','China','america','China','China','Japan']     # 再再设置一个america的坑
})
data

# **数据写入和读取**

data.to_csv("shopping.csv", index=False)
# index = False表示不加索引，否则会多一行索引
data = pd.read_csv("shopping.csv")

# ### 3. 数据查看

# **数据集基础信息查询**

# 数据的形状
data.shape

# +
# 所有列的数据类型
data.dtypes

# 某一列的数据类型
# data['id'].dtype      
# -

# 数据的维度
data.ndim

# 行索引
data.index

# 列索引
data.columns

# 查看对象值
data.values

# **数据集集体情况查询**

data.head() # 显示头部几行（默认5行）

data.tail() # 显示尾部几行（默认5行）

data.info() # 数据集相关信息概览：索引情况、列数据类型、非空值、内存使用情况

data.describe()    # 快速综合统计结果

# ### 4. 数据清洗

# **查看异常值**

# 当然，现在这个数据集很小，可以直观地发现异常值
for i in data:
    print(i+": "+str(data[i].unique()))   

# **空值检测**

data.isnull()
# data['department'].isnull()  # 查看某一列的空值

# 将空值判断进行汇总，更加直观，ascending默认为True，升序。
data.isnull().sum().sort_values(ascending=False)

# +
# Detect missing values.
# data.isna() 

# Whether each element in the DataFrame is contained in values.
# data.isin()
df = pd.DataFrame({'num_legs': [2, 4], 'num_wings': [2, 0]},
                  index=['falcon', 'dog'])
df.isin([2])
# -

# **空值处理**

# +
# pandas.DataFrame.fillna（value = None，method = None，inplace = False）

# value：用于填充的值，可以是具体值、字典和数组，不能是列表；
# method：填充方法，有 ffill(填充上一个值) 和 bfill（填充下一个值） 等；
# inplace默认无False，如果为True，则将修改此对象上的所有其他视图。

data['department'].fillna(method="bfill")
# 替换为具体值，并且在原对象值上进行修改
# data['department'].fillna(value="冷冻食品",inplace=True)    
# -

# **空格处理**

for i in data:
    if pd.api.types.is_object_dtype(data[i]):
        data[i] = data[i].str.strip()
data['origin'].unique()

# **大小写转换**

# +
# data['origin'].str.title()         # 将首字母大写
# data['origin'].str.capitalize()    # 将首字母大写
# data['origin'].str.upper()         # 全部大写
# data['origin'].str.lower()         # 全部小写
# -

# **数据替换**

# 将 America 替换为 America
data['origin'].replace("america", "America", inplace=True)
data['origin']

data['money'].replace(-10,np.nan,inplace=True)                    # 将负值替换为空值
data['money'].replace(np.nan,data['money'].mean(),inplace=True)   # 将空值替换为均值
data['money']

# **数据删除(方法一)**

#去掉 origin 为 American 的行
data1 = data[data.origin != 'America']
data1

#去掉所有包含Japan的行    不等于Japan的行为真，则返回
data2=data[(data != 'Japan').all(1)]    
data2

# **数据删除(方法2)**

# +
# # 默认删除后面出现的重复值，即保留第一次出现的重复值
data['origin'].drop_duplicates()

# 删除前面出现的重复值，即保留最后一次出现的重复值
# data['origin'].drop_duplicates(keep='last')
# -

data

# **数据格式转换**

data3 = data['id'].astype('str')    # 将id列的类型转换为字符串类型。

# **更改列名称**

data4 = data.rename(columns={'id':'ID', 'origin':'产地'})     # 将id列改为ID，将origin改为产地。

data4



StarcoderdataJupyterScriptsDedupFiltered