- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
merge
、join
和 concat
。groupby
功能,可以对数据进行分组,并应用聚合函数。pivot
、melt
等操作,可以轻松地重塑数据结构。在 Pandas 库中,Series 是一种一维数组结构,可以存储任何数据类型(整数、字符串、浮点数、Python 对象等)。它类似于 Python 中的列表(list)或 NumPy 的一维数组,但 Series 更加强大,因为它可以存储不同的数据类型,并且每个元素都有一个标签(称为索引).
可以使用pandas.Series类来新建Series,第一个参数可以带入(列表、元组、字典、numpy.ndarry)等数据.
ser = pd.Series([1,2,3,4,5],index=list('abcde'))
ser
如果省略index的话会默认从0开始创建索引 。
pd.Series([1,2,3,4,5])
使用loc方法可以根据标签来选择数据 。
#指定标签
print(ser.loc['b'])
#不使用loc
print(ser['b'])
#指定标签范围
print(ser.loc['a':'c'])
你已经很好地概述了 Pandas 中 Series 的创建和基本访问方法。下面我将补充一些细节和额外的操作,以帮助你更好地理解 Series 的使用.
在 Pandas 中,除了使用标签(索引)来选择数据外,还可以通过位置(整数索引)来选择数据。这与 Python 列表的索引类似。以下是一些示例:
import pandas as pd
# 创建 Series
ser = pd.Series([1, 2, 3, 4, 5], index=list('abcde'))
# 使用位置选择第一个元素
print(ser.iloc[0]) # 输出: 1
# 使用位置选择多个元素
print(ser.iloc[0:3]) # 输出: a 1, b 2, c 3
# 使用位置选择最后一个元素
print(ser.iloc[-1]) # 输出: 5
布尔索引是 Pandas 中非常强大的一个功能,它允许你根据条件选择数据。以下是一些示例:
import pandas as pd
# 创建 Series
ser = pd.Series([1, 2, 3, 4, 5], index=list('abcde'))
# 使用布尔索引选择大于2的元素
print(ser[ser > 2])
# 使用布尔索引选择小于等于3的元素
print(ser[ser <= 3])
你可以直接通过索引来修改 Series 中的数据:
ser['a'] = 10 # 修改索引为 'a' 的元素
print(ser)
Series 提供了许多内置的统计方法,如 sum(), mean(), max(), min(), std(), var() 等:
print(ser.sum()) # 求和
print(ser.mean()) # 求平均值
print(ser.max()) # 求最大值
print(ser.min()) # 求最小值
print(ser.std()) # 标准差
print(ser.var()) # 方差
如果 Series 中包含缺失值(NaN),Pandas 提供了多种处理方法,如 dropna(), fillna() 等:
ser = pd.Series([1, 2, None, 4, 5])
print(ser.dropna()) # 删除缺失值
ser.fillna(0, inplace=True) # 将缺失值填充为0
print(ser)
这些操作使得 Series 成为一个非常灵活和强大的数据结构,适用于各种数据分析任务.
DataFrame 是 Pandas 中的另一个核心数据结构,它是一个二维表格型数据结构,可以被看作是由多个 Series 组成的(每个 Series 作为 DataFrame 的一列),所有 Series 共享一个索引.
DataFrame 可以通过多种方式创建,例如从字典、列表、NumPy 数组、已有的 DataFrame 或者直接从数据文件(如 CSV)中读取.
import pandas as pd
# 从字典创建 DataFrame
data = {'Name': ['John', 'Anna', 'Peter', 'Linda'],
'Age': [28, 23, 34, 29],
'City': ['New York', 'Paris', 'Berlin', 'London']}
df = pd.DataFrame(data)
print(df)
# 从列表创建 DataFrame
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
df = pd.DataFrame(data, columns=['A', 'B', 'C'])
print(df)
# 从 NumPy 数组创建 DataFrame
import numpy as np
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
df = pd.DataFrame(data, columns=['A', 'B', 'C'])
print(df)
使用 .loc 可以基于标签选择数据。它允许你选择行和列.
# 选择行标签为 'John' 的行
print(df.loc[df['Name'] == 'John'])
# 选择列 'Age' 和 'City'
print(df.loc[:, ['Age', 'City']])
使用 .iloc 可以基于整数位置选择数据。它允许你选择行和列.
# 选择第一行
print(df.iloc[0])
# 选择前两行和前两列
print(df.iloc[:2, :2])
直接使用列名可以快速选择列.
# 选择 'Age' 列
print(df['Age'])
布尔索引允许你根据条件选择行.
# 选择 'Age' 大于 25 的行
print(df[df['Age'] > 25])
修改 DataFrame 中的数据与 Series 类似,可以直接通过标签或位置进行修改.
# 修改 'John' 的 'City' 为 'Los Angeles'
df.loc[df['Name'] == 'John', 'City'] = 'Los Angeles'
print(df)
DataFrame 提供了丰富的统计方法,可以对整个数据框或特定的列进行操作.
# 计算每列的描述性统计
print(df.describe())
# 计算 'Age' 列的平均值
print(df['Age'].mean())
与 Series 类似,DataFrame 也支持多种处理缺失数据的方法.
# 添加缺失值
df.loc[3, 'Age'] = None
# 删除包含缺失值的行
print(df.dropna())
# 填充缺失值
df.fillna(value=30, inplace=True)
print(df)
DataFrame 是进行数据科学和分析工作时非常强大的工具,它提供了灵活的数据操作和分析功能.
Pandas 提供了多种函数来读取不同格式的数据文件,这些函数使得数据导入变得非常简单和直接。以下是一些常用的数据读取方法:
CSV(逗号分隔值)文件是一种常见的数据交换格式。Pandas 的 read_csv 函数可以轻松读取 CSV 文件.
import pandas as pd
# 读取 CSV 文件
df = pd.read_csv('path_to_file.csv')
# 显示前几行数据
print(df.head())
read_csv 函数提供了许多参数来处理不同的 CSV 格式,例如指定分隔符、处理缺失值、选择特定的列等.
Excel 文件是一种广泛使用的电子表格格式。Pandas 的 read_excel 函数可以用来读取 Excel 文件.
# 读取 Excel 文件
df = pd.read_excel('path_to_file.xlsx')
# 显示前几行数据
print(df.head())
read_excel 函数允许你指定工作表、读取特定的单元格范围等.
Pandas 可以通过 SQL Alchemy 连接到数据库,并使用 read_sql 或 read_sql_query 函数读取 SQL 数据.
from sqlalchemy import create_engine
import pandas as pd
# 创建数据库连接引擎
engine = create_engine('database_connection_string')
# 读取 SQL 查询结果
df = pd.read_sql_query('SELECT * FROM table_name', con=engine)
# 显示前几行数据
print(df.head())
这里需要一个有效的数据库连接字符串,以及对应的数据库驱动.
Pandas 的 read_html 函数可以解析 HTML 中的 <table> 标签,并将其转换为 DataFrame 对象.
# 读取 HTML 文件
df = pd.read_html('path_to_file.html')
# df 是一个 DataFrame 列表,选择第一个 DataFrame
df = df[0]
# 显示前几行数据
print(df.head())
read_html 函数会尝试找到 HTML 文件中所有的 <table> 标签,并返回一个包含所有表格数据的 DataFrame 列表.
在读取这些文件时,Pandas 允许你指定各种参数来处理文件中的特定格式,例如编码、列名、数据类型等。这些函数大大简化了从不同数据源导入数据的过程.
数据预处理是数据分析和机器学习项目中的关键步骤,Pandas 提供了多种工具来帮助我们完成这些任务。以下是一些常见的数据预处理技术:
布尔索引允许我们根据条件筛选数据。我们可以对 DataFrame 或 Series 使用布尔表达式来选择满足条件的行或列.
import pandas as pd
# 假设我们有以下 DataFrame
df = pd.DataFrame({
'Age': [25, 30, 35, 40, 45],
'Name': ['John', 'Anna', 'Peter', 'Linda', 'Michael']
})
# 使用布尔值筛选年龄大于 30 的人
filtered_df = df[df['Age'] > 30]
print(filtered_df)
where 方法可以根据一个条件表达式来过滤数据,返回一个满足条件的布尔型 DataFrame 或 Series.
# 使用 where 方法筛选年龄大于 30 的人
filtered_df = df.where(df['Age'] > 30)
print(filtered_df)
where 方法返回的结果是对原始数据的布尔型掩码,如果需要替换不满足条件的值,可以结合 fillna 或 mask 方法使用.
直接通过标签或位置修改数据.
# 修改特定行的数据
df.loc[df['Name'] == 'John', 'Age'] = 28
# 修改特定列的数据
df['Age'] = df['Age'] + 1
print(df)
缺失值处理是数据预处理中的一个重要部分。Pandas 提供了多种方法来处理缺失值.
# 删除包含缺失值的行
df_cleaned = df.dropna()
# 填充缺失值
df_filled = df.fillna(value=0)
print(df_filled)
还可以使用 interpolate 方法来进行插值填充.
排序是数据分析中的常见操作,Pandas 提供了 sort_values 方法来对数据进行排序.
# 按年龄升序排序
sorted_df = df.sort_values(by='Age')
# 按年龄降序排序
sorted_df_desc = df.sort_values(by='Age', ascending=False)
print(sorted_df)
print(sorted_df_desc)
排序时可以指定多个列,并设置是否升序或降序.
这些是数据预处理中常用的一些操作,Pandas 提供的这些功能使得数据清洗和准备变得非常高效和方便.
统计计算是数据分析中的核心部分,Pandas 提供了丰富的函数来进行描述性统计分析。以下是一些常用的统计计算方法:
count()
: 计算非NA/null值的数量。mean()
: 计算平均值。median()
: 计算中位数。min()
和 max()
: 计算最小值和最大值。std()
和 var()
: 计算标准差和方差。sum()
: 计算总和。size()
: 返回数据的总大小。import pandas as pd
# 创建一个简单的 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50]
})
# 计算描述性统计
print(df.describe())
skew()
: 计算偏度(数据分布的不对称性)。kurt()
: 计算峰度(数据分布的“尾部”程度)。print(df.skew())
print(df.kurt())
corr()
: 计算列之间的相关系数。print(df.corr())
agg()
: 允许应用多个统计函数。print(df.agg(['mean', 'max', 'min']))
Pandas 的 describe() 方法可以快速提供一个数据框的汇总统计,包括平均值、标准差、最小值、最大值等.
# 对整个 DataFrame 进行描述性统计
print(df.describe())
# 对指定列进行描述性统计
print(df[['A', 'B']].describe())
describe() 方法默认计算数值列的统计信息,但也可以用于字符串类型的列,此时会显示计数、唯一值数量、最常见值等信息.
对于分类数据,可以使用 value_counts() 方法来查看每个类别的频率.
# 假设我们有一个分类列
df['Category'] = ['A', 'B', 'A', 'C', 'B']
print(df['Category'].value_counts())
统计计算是数据分析的基础,Pandas 提供的这些功能使得从数据中提取有意义的统计信息变得非常简单。通过这些统计函数,我们可以快速了解数据的分布、中心趋势和离散程度.
在 Pandas 中,groupby() 和 pivot_table() 是两个非常强大的工具,它们可以帮助我们对数据进行分组和汇总统计.
groupby() 方法允许我们根据一个或多个键将数据分组,然后对每个组应用聚合函数,如 sum()、mean()、count() 等.
import pandas as pd
# 创建一个示例 DataFrame
df = pd.DataFrame({
'Category': ['A', 'B', 'A', 'B', 'C', 'A', 'B', 'C'],
'Values': [10, 20, 30, 40, 50, 60, 70, 80]
})
# 根据 'Category' 列分组,并计算每个组的总和
grouped_sum = df.groupby('Category')['Values'].sum()
print(grouped_sum)
# 可以同时应用多个聚合函数
grouped_stats = df.groupby('Category')['Values'].agg(['sum', 'mean', 'count'])
print(grouped_stats)
groupby() 也可以用于多级分组,即根据多个列进行分组.
# 假设我们有另一个列 'Subcategory'
df['Subcategory'] = ['X', 'X', 'Y', 'Y', 'X', 'Y', 'X', 'Y']
grouped_multi = df.groupby(['Category', 'Subcategory'])['Values'].sum()
print(grouped_multi)
pivot_table() 方法类似于 groupby(),但它提供了更多的灵活性,允许我们重新排列数据,创建一个透视表,其中指定的列成为行和列索引,而其他列则用于计算值.
# 创建透视表,以 'Category' 为行索引,'Subcategory' 为列索引,计算 'Values' 的总和
pivot_table = df.pivot_table(index='Category', columns='Subcategory', values='Values', aggfunc='sum')
print(pivot_table)
pivot_table() 方法非常灵活,可以处理多个聚合函数,并且可以填充缺失值,处理缺失的组合等.
# 创建透视表,并填充缺失值
pivot_table_filled = df.pivot_table(index='Category', columns='Subcategory', values='Values', aggfunc='sum', fill_value=0)
print(pivot_table_filled)
pivot_table() 还允许我们指定多个聚合函数,并对结果进行进一步的处理.
# 创建透视表,并应用多个聚合函数
pivot_table_multi = df.pivot_table(index='Category', columns='Subcategory', values='Values', aggfunc=['sum', 'mean'])
print(pivot_table_multi)
这些工具在数据分析中非常有用,特别是当你需要对数据进行分组分析或创建复杂的汇总报表时。通过 groupby() 和 pivot_table(),我们可以轻松地对数据进行多维度的探索和分析.
时间序列数据是一系列按照时间顺序排列的数据点。在金融、气象、经济和其他许多领域中,时间序列分析是一个重要的分析工具。Pandas 提供了强大的工具来处理时间序列数据.
Pandas 提供了一系列专门用于处理时间序列数据的函数。这些函数可以帮助我们对时间序列数据进行索引、重采样、移动窗口统计等操作.
import pandas as pd
import datetime as dt
# 创建时间序列数据
dates = pd.date_range('20230101', periods=6)
values = [10, 20, 25, 30, 40, 50]
ts = pd.Series(values, index=dates)
# 访问时间序列数据
print(ts)
# 时间序列的日期偏移
ts_1day_later = ts.shift(1)
print(ts_1day_later)
# 时间序列的滚动统计
rolling_mean = ts.rolling(window=3).mean()
print(rolling_mean)
DatetimeIndex 是 Pandas 中专门用于时间序列的索引对象。它能够处理日期和时间数据,并提供丰富的时间序列功能.
# 创建 DatetimeIndex
index = pd.DatetimeIndex(['2023-01-01', '2023-01-02', '2023-01-03'])
# 将 DatetimeIndex 设置为范围
date_range = pd.date_range(start='2023-01-01', end='2023-01-10', freq='D')
# 创建时间序列数据
ts_with_range = pd.Series(range(10), index=date_range)
print(ts_with_range)
可以使用 DatetimeIndex 来筛选时间序列数据.
# 筛选特定时间段的数据
selected_ts = ts['2023-01-02':'2023-01-04']
print(selected_ts)
时间序列数据的采样是指从时间序列中提取特定时间点的数据。Pandas 允许我们使用 resample 方法对时间序列数据进行采样.
# 重采样时间序列数据
resampled_ts = ts.resample('D').mean() # 每日平均值
print(resampled_ts)
# 可以指定不同的频率
resampled_ts_monthly = ts.resample('M').mean() # 每月平均值
print(resampled_ts_monthly)
在处理时间序列数据时,Pandas 提供的这些工具可以帮助我们有效地管理和分析数据。通过时间序列分析,我们可以识别数据中的模式、趋势和季节性变化,这对于预测和决策制定非常有价值.
最后此篇关于使用pandas进行数据分析的文章就讲到这里了,如果你想了解更多关于使用pandas进行数据分析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我喜欢 smartcase,也喜欢 * 和 # 搜索命令。但我更希望 * 和 # 搜索命令区分大小写,而/和 ?搜索命令遵循 smartcase 启发式。 是否有隐藏在某个地方我还没有找到的设置?我宁
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 10年前关闭。 Improve this qu
从以下网站,我找到了执行java AD身份验证的代码。 http://java2db.com/jndi-ldap-programming/solution-to-sslhandshakeexcepti
似乎 melt 会使用 id 列和堆叠的测量变量 reshape 您的数据框,然后通过转换让您执行聚合。 ddply,从 plyr 包看起来非常相似..你给它一个数据框,几个用于分组的列变量和一个聚合
我的问题是关于 memcached。 Facebook 使用 memcached 作为其结构化数据的缓存,以减少用户的延迟。他们在 Linux 上使用 UDP 优化了 memcached 的性能。 h
在 Camel route ,我正在使用 exec 组件通过 grep 进行 curl ,但使用 ${HOSTNAME} 的 grep 无法正常工作,下面是我的 Camel 路线。请在这方面寻求帮助。
我正在尝试执行相当复杂的查询,在其中我可以排除与特定条件集匹配的项目。这是一个 super 简化的模型来解释我的困境: class Thing(models.Model) user = mod
我正在尝试执行相当复杂的查询,我可以在其中排除符合特定条件集的项目。这里有一个 super 简化的模型来解释我的困境: class Thing(models.Model) user = mod
我发现了很多嵌入/内容项目的旧方法,并且我遵循了在这里找到的最新方法(我假设):https://blog.angular-university.io/angular-ng-content/ 我正在尝试
我正在寻找如何使用 fastify-nextjs 启动 fastify-cli 的建议 我曾尝试将代码简单地添加到建议的位置,但它不起作用。 'use strict' const path = req
我正在尝试将振幅 js 与 React 和 Gatsby 集成。做 gatsby developer 时一切看起来都不错,因为它发生在浏览器中,但是当我尝试 gatsby build 时,我收到以下错
我试图避免过度执行空值检查,但同时我想在需要使代码健壮的时候进行空值检查。但有时我觉得它开始变得如此防御,因为我没有实现 API。然后我避免了一些空检查,但是当我开始单元测试时,它开始总是等待运行时异
尝试进行包含一些 NOT 的 Kibana 搜索,但获得包含 NOT 的结果,因此猜测我的语法不正确: "chocolate" AND "milk" AND NOT "cow" AND NOT "tr
我正在使用开源代码共享包在 iOS 中进行 facebook 集成,但收到错误“FT_Load_Glyph failed: glyph 65535: error 6”。我在另一台 mac 机器上尝试了
我正在尝试估计一个标准的 tobit 模型,该模型被审查为零。 变量是 因变量 : 幸福 自变量 : 城市(芝加哥,纽约), 性别(男,女), 就业(0=失业,1=就业), 工作类型(失业,蓝色,白色
我有一个像这样的项目布局 样本/ 一种/ 源/ 主要的/ java / java 资源/ .jpg 乙/ 源/ 主要的/ java / B.java 资源/ B.jpg 构建.gradle 设置.gr
如何循环遍历数组中的多个属性以及如何使用map函数将数组中的多个属性显示到网页 import React, { Component } from 'react'; import './App.css'
我有一个 JavaScript 函数,它进行 AJAX 调用以返回一些数据,该调用是在选择列表更改事件上触发的。 我尝试了多种方法来在等待时显示加载程序,因为它当前暂停了选择列表,从客户的 Angul
可能以前问过,但找不到。 我正在用以下形式写很多语句: if (bar.getFoo() != null) { this.foo = bar.getFoo(); } 我想到了三元运算符,但我认
我有一个表单,在将其发送到 PHP 之前我正在执行一些验证 JavaScript,验证后的 JavaScript 函数会发布用户在 中输入的文本。页面底部的标签;然而,此消息显示短暂,然后消失...
我是一名优秀的程序员,十分优秀!