Pandas基础(三)

Pandas基础(三)

一、本课目标
  • 掌握DataFrame的特点和使用
  • 掌握Pandas分析CSV文件
  • 掌握Pandas分析JSON文件
  • 掌握Pandas数据清洗
  • 掌握Pandas常用函数
十四、CSV 文件-1
  • CSV(Comma-Separated Values,逗号分隔值,也称为字符分隔值,因为分隔字符也可以不是逗号)
  • 以纯文本形式存储表格数据
  • CSV 是一种通用的、相对简单的文件格式,被商业和科学广泛应用
  • 打开CSV文件
    • df = pd.read_csv(‘nba.csv’)
    • print(df.to_string())
    • 注意to_string()的作用
df = pd.read_csv("pandas数据文件/nba.csv")
# 读取前五行文件和最后五行
print(df)
# 读取所有文件内容
print(df.to_string())
十五、CSV 文件-2
  • to_csv() 方法将 DataFrame 存储为 csv 文件
    • name = [“Google”, “Baidu”, “Taobao”, “Wiki”]
    • site = [“www.google.com”, “www.baidu.com”, “www.taobao.com”, “www.wiki.org”]
    • age = [90, 40, 80, 98]
    • dict = {‘name’: name, ‘site’: st, ‘age’: age}
    • df = pd.DataFrame(dict)
    • #保存 dataframe
    • df.to_csv(‘site.csv’,head=True,index=True,index_label=’ind’)
names = ['Tom', 'jack', 'rose']
chinese = [99, 90, 89]
math = [100, 80, 90]
df = pd.DataFrame({'name': names, 'chinese':'chinese', 'math':math})
print(df)

df.to_csv("pandas数据文件/data.csv", index=False)
df = pd.read_csv("pandas数据文件/data.csv")
print(df)
十六、JSON
  • JSON(JavaScript Object Notation),是存储和交换文本信息的语法
  • JSON 比 XML 更小、更快,更易解析
  • 打开JSON文件
    • df = pd.read_json(‘sites.json’)
    • print(df.to_string())
    • 注意to_string()方法的作用
pd.read_json("pandas数据文件/data.json")

names = ['Tom', 'jack', 'rose']
chinese = [99, 90, 89]
math = [100, 80, 90]
df = pd.DataFrame({'name': names, 'chinese':'chinese', 'math':math})
df.to_json("pandas数据文件/data1.json")
十七、数据清洗-1
  • 数据清洗是对一些没有用的数据进行处理的过程
  • 很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要使数据分析更加准确,就需要对这些没有用的数据进行处理
df = pd.read_csv("pandas数据文件/property-data.csv", na_values=['na', '--', 'HURLEY'])
print(df.to_string())
print('*'*60)
print(df.isna().to_string())
print(df.fillna(1234556).to_string())
print(df["NUM_BEDROOMS"].fillna("Y").to_string)
十八、数据清洗-2
  • 空值数据( property-data.csv )
    • 包含了五种空数据:(空白)、n/a、NA、—、na

在这里插入图片描述

df2 = df.dropna(how='all')
print(df2)
print('*'*30)
df2 = df.dropna(how='any')
print(df2)
十九、数据清洗-3
  • 通过 isnull() 判断各个单元格是否为空
  • 通过 dropna() 删除包含空数据的行或指定列包含空数据的行
    • df = pd.read_csv(‘property-data.csv’)
    • print (df[‘NUM_BEDROOMS’])
    • print (df[‘NUM_BEDROOMS’].isnull())
    • missing_values = [“n/a”, “na”, “–”]
    • df = pd.read_csv(‘property-data.csv’, na_values = missing_values)
    • print (df[‘NUM_BEDROOMS’])
    • print (df[‘NUM_BEDROOMS’].isnull())
    • new_df = df.dropna() 或 df.dropna(subset=[‘ST_NUM’])
    • print (new_df)
df2 = df.dropna(subset=["NUM_BEDROOMS", "NUM_BATH"])
print(df2)
二十、数据清洗-4
  • 通过 fillna() 方法来替换一些空字段
    • df.fillna(12345)
    • df [ [ ‘PID’,’ST_NUM’ ] ] .fillna(12345)
    • df[[“PID”,“ST_NUM”]].fillna({‘PID’:12345,‘ST_NUM’:23456})
  • 替换空单元格的常用方法是计算列的均值、中位数或众数
    • mean()、median() 和 mode() 方法计算列的均值(所有值加起来的平均值)、中位数(排序后排在中间的数)和众数(出现频率最高的数)
df = pd.DataFrame([1, 2, 3, 4, 5, 6], columns = ["c1"])
print(df["c1"].mean())
print(df["c1"].sum() / df["c1"].count())
print(df["c1"].mode().mean())

df = pd.read_csv("pandas数据文件/property-data.csv", na_values=['na', '--', 'HURLEY'])
print(df.to_string())
print('*'*60)
avg_bedrooms = df["NUM_BEDROOMS"].mode()
# 返回值是Series类型
print(type(avg_bedrooms))
# 返回的索引值为0
print(avg_bedrooms.loc[0])
print(df["NUM_BEDROOMS"].fillna(avg_bedrooms[0]))

avg_bath = df["NUM_BATH"].mean()
print(type(avg_bath))
print(avg_bath)
print(df["NUM_BATH"].fillna(round(avg_bath, 1)))

avg_sqft = df["SQ_FT"].median()
print(avg_sqft)
print(df["SQ_FT"].fillna(avg_sqft))

df = pd.read_csv("pandas数据文件/property-data.csv", na_values=['na', '--', 'HURLEY'])
print(df.to_string())
print('*'*60)
df1 = df.loc[4, "PID"] = 100005000.0
print(df)
二十一、数据清洗-5
  • 数据格式错误的单元格会使数据分析变得困难,甚至不可能
    • #第三个日期格式错误
    • data = {
    • “Date”: [‘2020/12/01’, ‘2020/12/02’ , ‘20201226’],
    • “duration”: [50, 40, 45]
    • } d
    • f = pd.DataFrame(data, index = [“day1”, “day2”, “day3”])
    • df[‘Date’] = pd.to_datetime(df[‘Date’], format=‘mixed’)
    • print(df.to_string())
# 第三个日期格式错误
data = {"Date": ['2020/12/01', '2020/12/02' , '20201226'], "duration": [50, 40, 45]} 
df = pd.DataFrame(data, index = ["day1", "day2", "day3"])
df['Date'] = pd.to_datetime(df['Date'], format='mixed')
print(df.to_string())
二十二、数据清洗-6
  • 数据错误也是很常见的情况,可以对错误的数据进行替换或移除
    • person = { “name”: [‘Google’, ‘Bdqn’ , ‘Taobao’], “age”: [50, 40, 12345]}
    • df = pd.DataFrame(person)
    • df.loc[2, ‘age’] = 30 # 修改数据
    • print(df.to_string())
    • person = { “name”: [‘Google’, ‘Runoob’ , ‘Taobao’], “age”: [50, 200, 12345]}
    • df = pd.DataFrame(person)
    • for x in df.index:
    • if df.loc[x, “age”] > 120:
    • df.loc[x, “age”] = 120 或 df.drop(x,inplace=True) # 修改数据或删除行
    • print(df.to_string())
person = { "name": ['Google', 'Bdqn' , 'Taobao'], "age": [50, 40, 12345]}
df = pd.DataFrame(person)
print(df)
print("*" * 30)
df.loc[2, 'age'] = 30 # 修改数据
print(df.to_string())

person = { "name": ['Google', 'Runoob' , 'Taobao'], "age": [50, 200, 12345]}
df = pd.DataFrame(person)
for x in df.index:
    if df.loc[x, "age"] > 120:
        df.loc[x, "age"] = 120 
        # df.drop(x,inplace=True) # 修改数据或删除行
print(df.to_string())
二十三、数据清洗-7
  • 如果我们要清洗重复数据,可以使用 duplicated() 和drop_duplicates() 方法
  • 如果对应的数据是重复的,duplicated() 会返回 True,否则返回 False
    • person = {
    • “name”: [‘Google’, ‘Baidu’, ‘Baidu’, ‘Taobao’],
    • “age”: [50, 40, 40, 23]
    • }d
    • f = pd.DataFrame(person)
    • print(df.duplicated())
    • 或df.
    • drop_duplicates(inplace = True)
    • print(df.to_string())
person = {"name": ['Google', 'Baidu', 'Baidu', 'Taobao'],"age": [50, 40, 40, 23]}
df = pd.DataFrame(person)
print(df.to_string)
print("*" * 20)
print(df.duplicated())
print("*" * 20)
df.drop_duplicates(inplace = True)
print(df)

df = pd.read_excel("pandas数据文件/Data.xlsx")
print(df)
二十四、数据清洗-8
  • 清洗空值数据
    • 删除包含空字段的行,可以使用 dropna() 方法
  • 清洗格式错误数据
    • 可以通过将列中的所有单元格转换为相同格式的数据
  • 清洗错误数据
    • 可以对错误的数据进行替换或移除
  • 清洗重复数据
    • 可以使用 duplicated() 和 drop_duplicates() 方法
二十五、常用函数-1
  • 读取数据
函数说明
pd.read_csv(filename)读取 CSV 文件;
pd.read_excel(filename)读取 Excel 文件;
pd.read_sql(query, connection_object)从 SQL 数据库读取数据;
pd.read_json(json_string)从 JSON 字符串中读取数据;
二十六、常用函数-2
  • 查看数据
函数说明
df.head(n)显示前 n 行数据;
df.tail(n)显示后 n 行数据;
df.info()显示数据的信息, 包括列名、 数据类型、 缺失值等;
df.describe()显示数据的基本统计信息, 包括均值、 方差、 最大值最小值等;
df.shape显示数据的行数和列数。
二十七、常用函数-3
  • 清洗数据
函数说明
df.dropna()删除包含缺失值的行或列;
df.fillna(value)将缺失值替换为指定的值;
df.replace(old_value, new_value)将指定值替换为新值;
df.duplicated()检查是否有重复的数据;
df.drop_duplicates()删除重复的数据。
二十八、常用函数-4
  • 数据选择和切片
函数说明
df[column_name]选择指定的列;
df.loc[row_index, column_name]通过标签选择数据;
df.iloc[row_index, column_index]通过位置选择数据;
df.ix[row_index, column_name]通过标签或位置选择数据;
df.filter(items=[column_name1, column_name2])选择指定的列;
df.filter(regex=‘regex’)选择列名匹配正则表达式的列;
df.sample(n)随机选择 n 行数据。
二十九、常用函数-5
  • 数据排序
函数说明
df.sort_values(column_name)按照指定列的值排序;
df.sort_values([column_name1, column_name2], ascending=[True, False])按照多个列的值排序;
df.sort_index()按照索引排序。
三十、常用函数-6
  • 数据分组和聚合
函数说明
df.groupby(column_name)按照指定列进行分组;
df.aggregate(function_name)对分组后的数据进行聚合操作;
三十一、常用函数-7
  • 数据选择和过滤
函数说明
df.loc[row_indexer, column_indexer]按标签选择行和列。
df.iloc[row_indexer, column_indexer]按位置选择行和列。
df[df[‘column_name’] > value]选择列中满足条件的行。
df.query(‘column_name > value’)使用字符串表达式选择列中满足条件的行。
三十二、常用函数-8
  • 数据统计和描述
函数说明
df.describe()计算基本统计信息, 如均值、 标准差、 最小值、 最大值等
df.mean()计算每列的平均值。
df.median()计算每列的中位数。
df.mode()计算每列的众数。
df.count()计算每列非缺失值的数量。
三十三、练习
data = [
{"name": "Google", "likes": 25, "url": "https://www.google.com"},
{"name": "Baidu", "likes": 30, "url": "https://www.baidu.com"},
{"name": "Taobao", "likes": 35, "url": "https://www.taobao.com"}
]
df = pd.DataFrame(data)
# 显示前两行数据
print(df.head(2))
# 显示最后一行数据
print(df.tail(1))
# 读取JSON数据
df = pd.read_json('data.json')
print(df)

# 删除缺失值
df = df.dropna()
print(df)

# 用指定的值填充缺失值
df = df.fillna({'age':0, 'score':0})
print(df)

# 重命名列名
df = df.rename(columns={'name':'姓名', 'age':'年龄', 'gender': '性别', 'score': '成绩' })
print(df)

# 按成绩排序
df = df.sort_values(by='成绩', ascending=False)
print(df)

# 按照'性别'列对DataFrame进行分组,并对'年龄'和'成绩'列计算平均值
grouped = df.groupby('性别').agg({'年龄': 'mean', '成绩':'mean'})
print(grouped)

# 选择成绩大于等于90的行,并只保留姓名和成绩两行
df = df.loc[df['成绩'] >= 90, ['姓名', '成绩']]
print(df)

# 计算每列的基本统计信息
stats = df.describe()
print(stats)

# 计算每列的平均值
mean = df[['年龄', '成绩']].mean()
print(mean)

# 计算每列的中位数
median = df[['年龄', '成绩']].median()
print(median)

# 计算每列的众数
mode = df.mode()
print(mode)

# 计算每列非缺失值的数量
count = df.count()
print(count)
三十四、总结
  • 掌握DataFrame的特点和使用
  • 掌握Pandas分析CSV文件
  • 掌握Pandas分析JSON文件
  • 掌握Pandas数据清洗
  • 掌握Pandas常用函数
  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI小白日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值