【数据分析--Pandas实战指南在真实世界数据中的应用】

news2024/10/2 1:33:13

前言:
💞💞大家好,我是书生♡,本阶段和大家一起分享和探索数据分析—基础介绍,本篇文章主要讲述了:数据分析的介绍,Python开源库,配置Jupyter,Pandas读取数据等等。欢迎大家一起探索讨论!!!
💞💞代码是你的画笔,创新是你的画布,用它们绘出属于你的精彩世界,不断挑战,无限可能!

个人主页⭐: 书生♡
gitee主页🙋‍♂:闲客
专栏主页💞:大数据开发
博客领域💥:大数据开发,java编程,前端,算法,Python
写作风格💞:超前知识点,干货,思路讲解,通俗易懂
支持博主💖:关注⭐,点赞、收藏⭐、留言💬

目录

  • 1. Pandas数据结构
  • 2. Pandas数据结构
    • 2.1 核心结构
    • 2.2 Series对象
      • 2.2.1 创建Series对象
      • 2.2.2 Series常见属性
      • 2.2.3 Series常见方法
      • 2.2.4 布尔值获取部分数据
      • 2.2.5 Sreies对象的运算
  • 2.3 dataframe对象
      • 2.3.1 创建dataframe对象
      • 2.3.2 DataFrame 对象的属性
      • 2.3.3 DataFrame对象的方法
      • 2.3.4 布尔值获取Dataframe对象中的部分数据
      • 2.3.5 DataFrame对象的运算
  • 3. pandas读写数据
    • 3.1 Excel读写数据
    • 3.2 CSV读写数据
    • 3.3 json文件
  • 4. Pandas读取数据库
    • 4.1 连接数据库
    • 4.2 存入数据库中
    • 4.3 读取数据

1. Pandas数据结构

Pandas 是一个强大的 Python 库,专为数据处理和分析设计。它基于 NumPy 构建,并提供了一系列高效的数据结构和数据分析工具。Pandas 的核心数据结构是 SeriesDataFrame,这两个结构非常适合处理表格型数据和时间序列数据。

Pandas核心结构:

  • Series
  • DataFrame

在这里插入图片描述

Pandas 的核心特点

  1. 易于使用的数据结构

    • Series:一维数组,可以保存任何数据类型(整数、字符串、浮点数、Python 对象等)。
    • DataFrame:二维标签数据结构,可以看作是由 Series 组成的表格,每一列可以是不同的值类型。
  2. 数据清洗和准备

    • 缺失值处理:Pandas 提供了许多处理缺失数据的方法,如填充、删除或替换。
    • 数据转换:可以轻松地转换数据类型、重塑数据结构等。
    • 数据合并:提供多种方式来合并数据集,如 join、merge 和 concat。
  3. 数据选择与索引

    • 灵活的索引选项,包括基于位置的选择和基于标签的选择。
    • 支持条件选择,可以轻松过滤数据。
  4. 时间序列功能

    • 提供丰富的功能来处理时间序列数据,包括日期范围生成、偏移操作、日期解析等。
  5. 数据读写

    • 支持多种数据格式,如 CSV、Excel、SQL 数据库等。
    • 可以处理大型数据集,支持分块读取数据。
  6. 统计分析

    • 提供了大量的统计函数来分析数据,如描述性统计、排序、分位数等。
  7. 高级数据操作

    • 支持复杂的数据操作,如分组聚合(groupby)、透视表(pivot tables)等。
  8. 性能优化

    • 内置的优化算法,可以在处理大数据集时保持较高的性能。
  9. 数据可视化

    • 与 Matplotlib 和 Seaborn 等可视化库集成良好,可以轻松创建图表。

2. Pandas数据结构

2.1 核心结构

  • Series
  • DataFrame

在 Pandas 中,SeriesDataFrame 是两个核心的数据结构,它们的设计旨在让数据处理和分析变得简单而高效。下面分别介绍这两个数据结构的特点和用途:

Series
Series 是一个一维的带标签数组,它可以容纳任何数据类型(整数、字符串、浮点数、Python 对象等)。Series 的轴标签统称为索引(index)。一个 Series 可以看作是一个字典(dict)或一维 NumPy 数组的一般化版本。

  • 特点:
    • 由一组数据(数组形式)以及一组与之相关的数据标签(索引)组成。
    • 类似于一维数组,但提供了更多的功能,如自动对齐数据、缺失数据处理等。
    • 索引可以是任何不可变数据类型,默认索引为整数索引,从 0 开始递增。
  • 总结
    • 一行或一列数据, 一维数据
    • 只有行索引(列名/行号)

在这里插入图片描述

  • 示例代码:
import pandas as pd

# 创建一个简单的 Series
s = pd.Series([1, 3, 5, np.nan, 6, 8])
print(s)

# 创建一个带有自定义索引的 Series
dates = pd.date_range('20230101', periods=6)
s = pd.Series([1, 3, 5, np.nan, 6, 8], index=dates)
print(s)

DataFrame
DataFrame 是一个二维带标签的数据结构,具有行索引和列索引。你可以把它想象成一个表格或 Excel 工作表,或者一个字典的字典,其中每个键都是一个列名,对应的值是一个 Series

  • 特点:
    • 由两部分组成:一个由列组成的字典(每列都是一个 Series)和一个索引。
    • 可以包含不同类型的列。
    • 行索引默认为整数索引,列索引通常是字符串。
    • 支持多种数据操作,如选择、过滤、聚合等。
  • 总结
    • 多行多列组成的数据, 二维数据(excel表格/mysql表格)

在这里插入图片描述

  • 示例代码:
import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'A': [1, 2, 3, 4],
    'B': [5, 6, 7, 8],
    'C': [9, 10, 11, 12],
    'D': [13, 14, 15, 16]
}
df = pd.DataFrame(data)
print(df)

# 创建一个带有自定义索引和列名的 DataFrame
dates = pd.date_range('20230101', periods=4)
df = pd.DataFrame(data, index=dates, columns=['B', 'C', 'D', 'A'])
print(df)
  • 使用场景

    • Series 适用于单个数据列的情况,如时间序列数据或单变量数据。
    • DataFrame 适用于多变量数据,特别是当数据有多个维度时。
  • 常见操作

    • 选择数据:可以通过索引、标签或布尔数组来选择数据。
    • 处理缺失数据SeriesDataFrame 都提供了处理缺失值的方法,如删除或填充。
    • 统计汇总:可以计算均值、最大值、最小值等统计值。
    • 数据清洗:包括去除重复项、转换数据类型等。
    • 数据转换:如重塑数据、层次化索引、应用函数等。
    • 数据合并:通过多种方法合并不同的 SeriesDataFrame

2.2 Series对象

2.2.1 创建Series对象

Series对象中, 一列是同一个类型, 类似mysql中的字段类型

data是数据,index是索引也就是我们的行号
pd.Series(data=,index=) 通过numpy的数组类型创建
  • 通过numpy的数组类型创建

通过numpy这个Python开源库,调用里面的array方法

import pandas as pd
import numpy as np
# 通过numpy的数组类型创建
n1 = np.array([1,2,3,4])
print(n1)
print(type(n1))
date = pd.Series(data=n1)
print(date)
print(type(date))

在这里插入图片描述

注意:import pandas as pd和import numpy as np 只需要执行一次即可,因此我后面代码不会写这两个

  • 通过列表创建Series对象

我们自己直接定义列表,然后放进我们的data参数就可以了

date = pd.Series(data=n1,index=['a','b','c','d'])
print(date)
print(type(date))
s1 = pd.Series(data=[1,2,3,4])
print(s1)

在这里插入图片描述
我们的列表也可以嵌套

# object : 在这里面就是我们的字符串类型
s1 = pd.Series(data=[1,2,2.11,'aaa',[4,5]],index=['a','b','c','d','e'])
print(s1)
print(type(s1))

在这里插入图片描述

  • 通过Python元组创建Series对象

我们在之前的创建Series中本质都是先创建一个列表,在进行转换,数组也是,将一个列表通过array转化为数组形式的。
我们现在使用Python的元组创建Series对象,直接创建一个Python类型的元组,不需要进行转换了。

s1 = pd.Series(data=(1,2,3,4.11,5.22222))
print(s1)
print(type(s1))

在这里插入图片描述

  • 通过Python字典创建Series对象
s1 = pd.Series(data={'a':1,'b':2,'c':3})
print(s1)
print(type(s1))

在这里插入图片描述

2.2.2 Series常见属性

我们使用Series对象的属性,格式为:对象名.属性名

先定义两个Series对象:一个一维的,一个二维的

s1 =pd.Series(data=[1,2,3,4,5,1,2,3])
print(s1)
print(type(s1))
s2 =pd.Series(data=[[1,2,3],[2,3,4],[4,5]],index=['a','b','c'])
print(s2)
print(type(s2))

在这里插入图片描述

  • 个数Sreies对象元素个数

我们使用 size这个属性,通过对象名调用

#  个数Sreies对象元素个数
print(s1.size)
print(s2.size)

在这里插入图片描述

  • 查看形状, 维度

我们使用 shape这个属性,通过对象名调用
返回元组类型, 元组中元素个数表示维度数 元素值表示行数

#  个数Sreies对象元素个数
print(s1.size)
print(s2.size)

在这里插入图片描述

  • 查看数据类型,dtype和dtype这两个效果是一样的,用哪一个都可以

我们使用 dtype / dtypes 这个属性,通过对象名调用

# 查看数据类型,dtype和dtype这两个效果是一样的,用哪一个都可以
print(s1.dtype)
print(s1.dtype)
print(s2.dtype)
print(s2.dtypes)

在这里插入图片描述

  • 查看数据, 返回numpy数组类型

我们使用 values这个属性,通过对象名调用

# 查看数据, 返回numpy数组类型
print(s1.values)
print(type(s1.values))

在这里插入图片描述

  • 查看索引值

我们使用 index 这个属性,通过对象名调用

# 查看索引值
print(s1.index)
print(s2.index)

在这里插入图片描述

2.2.3 Series常见方法

格式:对象名.方法名(参数1,参数2....)

  • 查看行数

我们使用 len这个方法,()里面是我们的Series对象

# 查看行数
print(len(s1))
print(len(s2))

在这里插入图片描述

  • 查看前n个数据

查看前n个数据, 默认前5个, 可以通过n指定
我们使用 head()这个方法,()里面是我们的指定的行数,可以不写,为默认的

# 查看前n个数据, 默认前5个, 可以通过n指定
print(s1.head())
print(s1.head(n=2))
print(s2.head())
print(s2.head(n=2))

在这里插入图片描述

  • 查看后n个数据

查看后n个数据, 默认前5个, 可以通过n指定
我们使用 tail()这个方法,()里面是我们的指定的行数,可以不写,为默认的

# 查看后n个数据, 默认后5个, 可以通过n指定
print(s1.tail())
print(s1.tail(n=2))
print(s2.tail())
print(s2.tail(n=2))

在这里插入图片描述

  • 查看索引值

我们使用 keys()这个方法
索引为字符型的话我们直接显示索引,如果是数字的话只显示起始范围,以及两个索引值之间的差值

# 查看索引值
print(s1.keys())
print(s2.keys())

在这里插入图片描述

  • 转换成python列表

我们使用 tolist / to_list()这个方法
tolist和to_list效果是一样的

# 查看索引值
print(s1.keys())
print(s2.keys())

在这里插入图片描述

  • 转换成dataframe对象

我们使用 to_frame()这个方法
dataframe对象 是有列名的,因此这个方法会默认给我们的值加上一个列名,默认是从0 开始的

# 转换成dataframe对象
print(s1.to_frame())
print(s2.to_frame())
s1.to_frame()
# s2.to_frame()

在这里插入图片描述

  • 聚合函数

我们使用 sum / mean/count ()这个方法
一维数据直接使用这些方法就行,
二维及以上的只能求出内嵌的值,使用apply方法 + sum/len方法

print(s1.sum())
print(s1.mean())
print(s1.count())
print(s2.apply(sum))
print( s2.apply(lambda x: sum(x) / len(x)))
print( s2.apply(len))

在这里插入图片描述

  • 去重

我们使用 drop_duplicates()这个方法
返回s对象 , 只能对一维进行去重,多维的数据不能直接只用这个方法

# 去重, 返回s对象
print(s1.drop_duplicates())
# print(s2.apply(drop_duplicates)) # 嵌套的不能直接使用drop_duplicates进行去重

在这里插入图片描述

# 去重, 返回数组对象
print(s1.unique())
#  print(s2.unique()) # 嵌套的不能直接使用unique进行去重,返回数组对象

在这里插入图片描述

  • 数据值排序

我们使用 sort_values()这个方法,里面是我们的排序是升序还是降序,默认是TRUE是升序的
对数据值排序 ,默认是TRUE,升序的,FALse是降序的

# 对数据值排序 ,默认是TRUE,升序的,FALse是降序的
print(s1.sort_values(ascending=False))
print(s1.sort_values(ascending=True))
print(s2.sort_values(ascending=False))
print(s2.sort_values(ascending=True))

在这里插入图片描述

  • 索引排序

我们使用 sort_index()这个方法,里面是我们的排序是升序还是降序,默认是TRUE是升序的
对索引排序 ,默认是TRUE,升序的,FALse是降序的

# 对索引排序 ,默认是TRUE,升序的,FALse是降序的
print(s1.sort_index(ascending=False))
print(s1.sort_index(ascending=True))
print(s2.sort_index(ascending=False))
print(s2.sort_index(ascending=True))

在这里插入图片描述

  • 统计每个值出现的次数

我们使用 value_counts()这个方法 相当于 --》分组计数

# 统计每个值出现的次数->分组计数 ※
print(s1.value_counts())
print(s2.value_counts())

在这里插入图片描述

2.2.4 布尔值获取部分数据

ages = pd.Series([18,20,22,16,21])
print(ages)
print(type(ages))

在这里插入图片描述

同年纪和平均值进行判断,年纪》平均值为TRue,反之为False
最后取出,为TRUE的=

print(type(ages))
#%%
# 获取大于等于平均年纪的数据
# 计算平均值
avg = ages.mean()
print(avg)
# 对象中的ages大于等于平均值进行比较,返回布尔值,并且将布尔值转换Series
print(ages>=avg)
#  获取大于等于平均值的数据 s[布尔值列表/布尔值s对象/布尔值数组]
print(ages[ages>=avg])

在这里插入图片描述

# 通过布尔值数组获取s对象中的部分数据
bool_array = np.array([False,True,True,False,True])
ages[bool_array]

在这里插入图片描述

2.2.5 Sreies对象的运算

对象的运算只要分为两种:

  • s对象和数值之间进行计算, s对象中的每个值都要和数值进行计算
  • s对象之间进行计算, 根据索引值相同进行计算, 索引值不同用NaN值代替计算结果
  • s对象和数值之间进行计算:主要是S对象中的某一个列和常数进行计算
ages = pd.Series([18,20,22,16,21])
# 年纪+10
print(ages+10)
# 年纪*2
print(ages*2)
# 年纪取余
print(ages%2)
# 对象之间的计算
print(ages+ages)

在这里插入图片描述

  • s对象之间计算:根据索引值相同进行计算, 索引值不同用NaN值代替计算结果
new_ages = pd.Series(data=[10, 20, 30], index=[1, 3, 5])
new_ages
ages + new_ages

在这里插入图片描述

2.3 dataframe对象

2.3.1 创建dataframe对象

pd.DataFrame(data=, index=, columns=)

  • data: 数据
  • index: 指定索引, 默认是从0开始的整数
  • columns: 指定列名, 默认是从0开始的整数
# data: 数据
# index: 指定索引, 默认是从0开始的整数
# columns: 指定列名, 默认是从0开始的整数
# pd.DataFrame(data=, index=, columns=)

# 通过python字典创建
# key值是df中的列名, value值是df中的数据值
data_dict = {"姓名": ['小红', '小明', '张三'],
             "年龄": [16, 18, 22],
             "性别": ["女", "男", "男"]}
df1 = pd.DataFrame(data=data_dict, index=['a', 'b', 'c'])
df1

在这里插入图片描述

# 通过二维数据创建
# 列表中有几个元素就是有几列, 嵌套列表中有几个元素就是有几行
# data_list = [["小红", 18, "女", 168], ["小明", 20, "男", 178], ["老王", 35, "女" ,160]]
data_list = [("小红", 18, "女", 168), ("小明", 20, "男", 178), ("老王", 35, "女" ,160)]
df2 = pd.DataFrame(data=data_list, index=["a", "b", "c"], columns=["姓名", "年龄","性别", "身高"])
df2

# s.to_frame(): 将s对象转换成df对象
# pd.read_csv(): 读取数据转换成df对象

在这里插入图片描述
注意:

  • s.to_frame(): 将s对象转换成df对象
  • pd.read_csv(): 读取数据转换成df对象

2.3.2 DataFrame 对象的属性

数据准备:

df = pd.read_csv('/root/Python_Spark/day0/scientists.csv')
df

在这里插入图片描述

  • 查看索引 – index
# 查看索引
print(df.index)

在这里插入图片描述

  • 查看列名 —columns
# 查看列名
print(df.columns)

在这里插入图片描述

  • 查看数据 —values
# 查看数据,返回二维数组类型
print(df.values)

在这里插入图片描述

  • 查看形状(几行,几列)
# 查看形状(几行,几列)
print(df.shape)

在这里插入图片描述

  • 查看数据类型
# 查看数据类型(每一列的数据类型)
print(df.dtypes)

在这里插入图片描述

  • 查看数据个数(行数* 列数)
# 查看数据个数(行数* 列数)
print(df.size)

在这里插入图片描述

2.3.3 DataFrame对象的方法

DataFrame对象的方法大部分都和Series对象的方法差不多,因此就不全部讲了


# 查看前n行数据, 默认5行, 通过n参数指定
print(df.head())
print(df.head(n=3))
# 查看后n行数据, 默认5行, 通过n参数指定
print(df.tail())
print(df.tail(n=2))
# 查看列名
print(df.keys())
# 聚合函数 -> 对每列进行聚合操作
print(df.sum())
print(df.mean())
  • 打印数值的统计描述,打印数值列统计描述信息 个数/平均值/标准差/最小值/分位值/最大值
# 打印数值的统计描述
print(df.describe())

在这里插入图片描述

  • 打印字符串列统计描述信息 个数/唯一值个数/出现次数最多的值/出现次数
df.describe(include=['object'])

在这里插入图片描述

  • 对索引值排序
df.sort_index(ascending=False)

在这里插入图片描述

  • 查看基本信息 类型/索引/列名/非空值个数/列类型/不同类型列数量/内存大小
# 查看基本信息
df.info()

在这里插入图片描述

2.3.4 布尔值获取Dataframe对象中的部分数据

  • 获取df中一列的数据
# 获取df中一列的数据
s = df['Age']
print(s)
print(type(s))

在这里插入图片描述

  • 获取df中一列的数据的平均值
# 获取df中一列的数据的平均值
print(s.mean())

在这里插入图片描述

  • 获取df中一列的数据的值大于平均值
# 获取df中一列的数据的值大于平均值
# 先获取年纪和平均值的比较,大于为true,小于为false
print(s > s.mean())
# 再获取大于平均值的数据
print(s[s > s.mean()])

在这里插入图片描述

  • 通过布尔值列表获取df中部分的数据
# 通过布尔值列表获取df中部分的数据
bool_list = [False, True, True, True, False, False, False, True]
n1= np.array(bool_list)
print(n1)
print(s[n1])

在这里插入图片描述

2.3.5 DataFrame对象的运算

  • ①df对象和数据之间进行计算, df对象中的每个值都要和数值进行计算 -> 非数值列只能进行乘法计算(复制粘贴)
  • ②df对象之间进行计算, 根据行索引值相同进行计算, 索引值不同用NaN值代替计算结果 -> 非数值列只能进行加法计算(复制粘贴)
  • df对象和数据之间进行计算
# df对象和数据之间进行计算
df * 2 

在这里插入图片描述

  • 获取df中的数值列进行计算
# 获取df中的数值列进行计算
print(df['Age'] + df['Age'])
print(df['Age'] + 10)

在这里插入图片描述

  • df对象之间进行计算
# df对象之间进行计算, 根据行索引值相同进行计算, 索引值不同用NaN值代替计算结果 -> 非数值列只能进行加法计算(复制粘贴)
df + df 

在这里插入图片描述

  • 获取对应索引值的值
# 获取索引值在0,2,4之间的值,存在为true,否则为false
df.index.isin(values=[0,2,4])

在这里插入图片描述

  • 获取对应索引值的数据
# 获取索引值在0,2,4之间的数据
new = df[df.index.isin(values=[0, 2, 4])]
new

在这里插入图片描述

  • df对象和df对象之间进行计算
# df对象和df对象之间进行计算
df + new

在这里插入图片描述

3. pandas读写数据

Pandas 提供了多种方法来读取和写入数据文件,这些方法使得数据处理变得非常方便。这里我将介绍一些最常见的读写操作,包括从CSV、Excel、SQL数据库等来源读取数据,以及将数据写回到这些格式中。

准备数据:

import pandas as pd
data = [
    [1, '张三', '1999-3-10', 18],
    [2, '李四', '2002-3-10', 15],
    [3, '王五', '1990-3-10', 33],
    [4, '隔壁老王', '1983-3-10', 40]
]

df = pd.DataFrame(data=data, columns=['id', 'name', 'birthday', 'age'])
df

在这里插入图片描述

注意:
因为我们的pycharm虽然在本地,但是我们是连接到Linux上面,因此我们的文件直接都保存到Linux对应的目录下面,如果我们想要本地查看我们可以下载到本地上。

3.1 Excel读写数据

  • 保存到Excel
# 保存
# df.to_excel(name=,sheet_name=,index=,header=)
# name:文件路径
# sheet_name:sheet名称
# index:是否保存行索引
# header:是否保存列名
df.to_excel('output/data.xlsx',sheet_name='student', index=False,header=True)

在这里插入图片描述

  • 读取
# 读取
# pd.read_excel(name=, shee_name=, index_col=)
# name: 文件路径
# shee_name: sheet名称
# index_col: 将哪列作为索引 索引下标, 列名
# parse_dates: 将列解析成日期格式 接受列名列表
new_df = pd.read_excel('output/data.xlsx', sheet_name="student", index_col=0, parse_dates=["birthday"])
new_df

在这里插入图片描述

  • 查看详细信息
# 查看详细信息
new_df.info()

在这里插入图片描述

3.2 CSV读写数据

  • 保存到csv文件
# 保存
# df.to_csv(path_or_buf=, sep=, index=, header=)
# path_or_buf:文件路径
# sep: 数据列之间的分隔符, 默认逗号
# index: 是否保存行索引
# header: 是否保存列名
df.to_csv(path_or_buf='output/student.csv', index=True, header=True)
# 以\t制表符为分隔符存储, .tsv格式
df.to_csv(path_or_buf='output/student.tsv', sep="\t", index=True, header=True)

在这里插入图片描述

  • 读取
# 读取
# pd.read_csv(filepath_or_buffer=, sep=, index_col=, parse_dates=, usecols=)
# filepath_or_buffer:文件路径
# sep:分隔符
# index_col:指定哪列作为索引
# parse_dates: 将列解析为日期类型
# usecols: 读取哪些列
new_df = pd.read_csv(filepath_or_buffer='output/student.csv', sep=',', index_col=0, parse_dates=['birthday'], usecols=['name', "birthday"])
new_df
# pd.read_csv('output/student.tsv', sep='\t')

在这里插入图片描述

  • 查看详细信息
# 查看详细信息
new_df.info()

在这里插入图片描述

3.3 json文件

df.to_json('output/student.json')
pd.read_json('output/student.json')

在这里插入图片描述
在这里插入图片描述

4. Pandas读取数据库

4.1 连接数据库

  • 第一步:连接我们的数据库
# 导入sqlalchemy的数据库引擎
from sqlalchemy import create_engine

# 创建数据库引擎,传入url规则的字符串
engine = create_engine('mysql+pymysql://用户名:密码@IP地址:端口号/数据库名?charset=utf8')
# mysql+pymysql://root:123456@192.168.88.100:3306/test?charset=utf8
# mysql 表示数据库类型
# pymysql 表示python操作数据库的包
# root:123456 表示数据库的账号和密码,用冒号连接
# 192.168.88.100:3306/test 表示数据库的ip和端口,以及名叫test的数据库
# charset=utf8 规定编码格式

我们可以连接虚拟机的和本地的

  • 连接虚拟机:虚拟机上的mysql,我们只需要连接ip和端口或以及库名就可以了,不需要配置其他的
    虚拟机上的ip我们可以使用虚拟机对外公布的ip或者是127.0.0.1 因为我们的环境是执行在Linux上的因此127.0.0.1也是我们虚拟机上的
  • 本地连接:我们要先知道我们电脑的ip,Win+R 输入cmd
    输入ipconfig 查看我们无线局域网的ipv4的ip地址。这个就是我们的电脑的。
    然后打开pychar连接数据库,进入之后,选择Mysql数据库中的mysql库中的user表
    执行下列sql,之后就可以进行连接了
use mysql;
select host,user from user; #查看数据库的权限信息
update user set host = '%' where user ='root'; #修改权限
flush privileges;#刷新

4.2 存入数据库中

我们使用to_sql这个方法,注意我们需要传入的参数,表的名称,数据库连接引擎,存入方式是覆盖还是追加

# df.to_sql()方法将df数据快速写入数据库, 表不存在时会自动创建
df.to_sql(name='student', con=engine, index=False, if_exists='append')
# name:数据表的名称
# con:数据库交互引擎对象
# index=False: 表示不将索引保存到数据表中
# if_exists: 数据写入方式, append->追加写入 replace->覆盖写入

在这里插入图片描述

4.3 读取数据

  • to_sql 读取数据库:即可以通过sql读取,也可以通过表名读取
# 根据sql语句
pd.read_sql(sql='select * from student', con=engine) 
# =根据表名
pd.read_sql(sql='student', con=engine, columns=['name', 'id'])

在这里插入图片描述
在这里插入图片描述

  • read_sql_query(只能读取sql语句)
pd.read_sql_query(sql="select * from student", con=engine)

在这里插入图片描述

  • read_sql_table(只能读取表名)
pd.read_sql_table(table_name="student", con=engine, columns=['name', 'id'])

在这里插入图片描述

💕💕在这篇文章中,我们深入探讨了数据分析的介绍,Python开源库,配置Jupyter等等相关使用,希望能为读者带来启发和收获。
💖💖感谢大家的阅读,如果您有任何疑问或建议,欢迎在评论区留言交流。同时,也请大家关注我的后续文章,一起探索更多知识领域。
愿我们共同进步,不断提升自我。💞💞💞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1979393.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

echarts 漏斗图 渐变金字塔

使用echarts实现金字塔效果,颜色渐变,左右显示其对应的值 效果: 如果要实现一个正三角的形状,需要在data数组中,将value赋值成有序递增,bl代表他的分值,显示在左侧。 var data [{name: "…

NSS [SWPUCTF 2022 新生赛]file_master

NSS [SWPUCTF 2022 新生赛]file_master 开题,一眼文件上传。 network看看返回包。后端语言是PHP。 除了文件上传还有个查看文件功能。 起手式查询/etc/passwd,发现查询方法是GET提交参数,后端使用file_get_contents()函数包含文件。同时有op…

MySQL基础练习题21-按日期分组销售产品

目录 题目 准备数据 分析数据 总结 题目 找出每个日期、销售的不同产品的数量及其名称。每个日期的销售产品名称应按词典序排列。 返回按 sell_date 排序的结果表。 准备数据 ## 创建库 create database db; use db;## 创建表 Create table If Not Exists Activities (s…

初阶数据结构4 二叉树

1. 树 1.1 树的概念与结构 树是⼀种⾮线性的数据结构,它是由 n(n>0) 个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树,也就是说它是根朝上,⽽叶朝下的。 有⼀个特殊的结点&#…

Flink实时数仓(六)【DWD 层搭建(四)交易域、互动域、用户域实现】

前言 今天的任务是完成 DWD 层剩余的事实表;今年的秋招开得比往年早,所以要抓紧时间了,据了解,今年的 hc 还是不多,要是晚点投铁定寄中寄了; 今天还是个周末,不过记忆里我好像整个大学都没有好好…

如何实现ElementUI表单项label的文字提示?

在Vue和ElementUI的丰富组件库中,定制化表单是常见的需求之一。那么如何在表单项label后添加文字提示,以提升用户体验呢? 首先我们来看一下效果图: 这里我们鼠标移动到❓图标上就会出现提示 在 ElementUI 中,el-form-item 组件允许使用 slot 自定义 label。通过在 el-fo…

Boost:asio网络编程从同步到异步

文章目录 同步服务器客户端服务端 异步服务器(有问题)异步服务器优化 在学TCP的时候&#xff0c;写的第一个服务器就是一个echo服务器&#xff0c;那在Boost网络编程中&#xff0c;自然也先写一个echo服务器练练手 同步服务器 客户端 #include <iostream> #include &l…

<数据集>BDD100K人车识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;15807张 标注数量(xml文件个数)&#xff1a;15807 标注数量(txt文件个数)&#xff1a;15807 标注类别数&#xff1a;7 标注类别名称&#xff1a; [pedestrian, car, bus, rider, motorcycle, truck, bicycle] 序号…

Java-变量,运算符,输入与输出

目录 一&#xff0c;语法基础 1.基本Java程序 2.语法基础 2.1 变量 2.2 常量限制(fiinal)类比C中的const 2.3 类型转化 2.4 运算符 2.5 表达式 2.5 输入与输出 2.5.1 输入 2.5.2 输出 一&#xff0c;语法基础 1.基本Java程序 public class Main{public static void…

差分放大电路

目录 引出 复合管 直接耦合放大电路 问题: 怎么抑制 初代电路(已引入负反馈之后) 分析 怎么解决 镜像电路 两个概念 分析直流通路: 分析交流电路: 差分放大电路的分析 交流通路 简化 H参数等效 可以得到 其他接法 引出 复合管 目的:获得更大的放大倍数 多只…

3个二创文案生成器,让文案创作变简单

在当今数字时代&#xff0c;内容创作已经成为了一项非常重要的工作。无论是为了推广产品、营销服务&#xff0c;还是仅仅为了吸引读者&#xff0c;优质的文案都是至关重要的。然而&#xff0c;对于许多人来说&#xff0c;写出令人印象深刻的文案并不容易。这就是为什么二创文案…

基于Django框架的挂号诊疗系统(源码+论文+部署讲解等)

博主介绍&#xff1a;✌全网粉丝10W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术栈介绍&#xff1a;我是程序员阿龙&#xff…

【优秀python系统案例】基于python Flask的电影票房数据爬取与可视化系统的设计与实现

第1章 绪论 1.1 研究背景及意义 进入21世纪&#xff0c;特别是第二个十年&#xff0c;世界互联网取得了惊人的快速发展。根据分析师玛丽米克尔 (Mary Mikel) 2016年发布的一份互联网趋势报告&#xff0c;到2016年年中&#xff0c;全球互联网用户超过30亿&#xff0c;约占全球…

职场上的人情世故,你知多少?

对于职场新人来说&#xff0c;在学习人情世故时&#xff0c;不仅要学会哪些事情该做&#xff0c;还需要知道哪些事情千万不能做&#xff0c;这样才能让自己起码不会得罪别人&#xff0c;甚至得到更多的晋升机会。学会下面的四大职场规则&#xff0c;能让你的职场生涯更顺利。 …

MUSE Multi-View Contrastive Learningfor Heterophilic Graphs

发表于:CIKM 推荐指数: #paper/⭐ 一句话总结:融合了GCN(A,X)和GCN(A,I),创新性不足,因此只能B会 流程: 融合部分: h i f h i s λ i h i c h_i^fh_i^s\lambda_ih_i^c hif​his​λi​hic​ 由于有n个 λ \lambda λ.因此作者加了如下优化: L ϕ ∑ i 1 N λ i s ( h i …

贪心算法之货仓选址问题

#include<stdio.h> #include<stdlib.h> #include<math.h>//贪心算法之货仓选址问题/*** void* p是万能指针&#xff0c;可以和其它任意类型的指针进行转换&#xff0c;前提是确保转换是合法的*/ //写好用于qsort的比较函数&#xff0c;这里写的函数一般用于…

【K8S】为什么需要Kubernetes?

文章目录 1 什么是Kubernetes&#xff1f;2 三种常见的应用部署方式2.1 传统部署2.2 虚拟化部署2.3 容器化部署 3 Kubernetes的特点写在最后 1 什么是Kubernetes&#xff1f; Kubernetes是 一个开源的&#xff0c;用于管理云平台中多个主机上的容器化应用&#xff0c;Kubernet…

分享6款有助于写论文能用到的软件app!

在学术写作中&#xff0c;选择合适的软件和工具可以大大提高效率和质量。以下是六款有助于写论文的软件app推荐&#xff0c;其中特别重点介绍千笔-AIPassPaPer这款AI原创论文写作平台。 1. 千笔-AIPassPaPer 千笔-AIPassPaPer是一款功能全面且高效的AI原创论文写作平台。它能…

RabbitMQ高级特性 - 非持久化 / 持久化(交换机、队列、消息)

文章目录 RabbitMQ 持久化机制概述实现非持久化&#xff08;交换机、队列、消息&#xff09;实现持久化&#xff08;交换机、队列、消息&#xff09; RabbitMQ 持久化机制 概述 前面讲到了 生产者消息确认机制 和 消费者消息确认机制&#xff0c;保证了消息传输的可靠性&#…

断电引起redo和数据文件不一致故障恢复---惜分飞

有些时候故障总是来的让人非常意外,这个在准备停机迁移数据库之前的几分钟由于某种原因直接导致主机掉电,再次开机数据库无法启动 Sat Aug 03 23:10:37 2024 Successful mount of redo thread 1, with mount id 3696805928 Database mounted in Exclusive Mode Lost write prot…