【Python】【Numpy+Pandas数据处理·闯关】和鲸社区学习笔记day(1)

简介: 【Python】【Numpy+Pandas数据处理·闯关】和鲸社区学习笔记day(1)

重要的一些步骤


1.将下面的字典创建为DataFrame¶


data = {"grammer":['Python', 'C', 'Java', 'GO', np.NaN, 'SQL', 'PHP', 'Python'],
       "score":[1.0, 2.0, np.NaN, 4.0, 5.0, 6.0, 7.0, 10.0]}
df = pd.DataFrame(data)
df

grammer
score
0 Python 1.0
1 C 2.0
2 Java NaN
3 GO 4.0
4 NaN 5.0
5 SQL 6.0
6 PHP 7.0
7 Python 10.0


2.交换两列位置


#方法2
cols = df.columns[[1,0]]
df = df[cols]
df



popularity
grammer
0 1.0 Python
1 2.0 C
2 3.0 Java
3 4.0 GO
4 5.0 NaN
5 6.0 SQL
6 7.0 PHP
7 10.0 Python


3.提取popularity列最大值所在行


df[df['popularity'] == df['popularity'].max()]



popularity
grammer
7 10.0 Python


4. 随机生成20个0-100的随机整数:Numpy.random.randint()


np.random.randint(0, 100, 20)


array([72, 68, 6, 41, 22, 63, 27, 43, 55, 26, 60, 89, 29, 83, 23, 68, 37,
70, 42, 31])


5.生成20个0-100固定步长的数:Numpy.arange()


np.arange()函数分为一/两/三个参数三种情况:


  • 一个参数时,参数值为终点,起点取默认值0,步长取默认值1。
  • 两个参数时,第一个参数为起点,第二个参数为终点,步长取默认值1。
  • 三个参数时,第一个参数为起点,第二个参数为终点,第三个参数为步长。其中步长支持小数
np.arange(0, 100, 5)

array([ 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80,
85, 90, 95])


6. 生成20个指定分布(如标准正态分布)的数:Numpy.random.normal()


np.random.normal(0, 1, 20)


array([-0.20191223, 0.71407157, -0.9127828 , -0.65248936, 1.06513536,

0.31551879, -0.71842129, -0.75766808, 0.488825 , -1.15330714,

-0.50300377, -0.4937517 , -1.11488371, -0.70628642, -1.86134249,

-0.03509479, 0.20524998, 0.04379019, 0.39735111, -1.58616105])


7. 查看两列值相等的行号:Numpy.where()


np.where()用法:


np.where(condition, x, y): #

满足条件(condition),输出x,不满足输出y


np.where(condition):只有条件

(condition),没有x和y,则输出满足条件 (即非0) 元素的坐标

(等价于numpy.nonzero)。当条件成立时,where返回的是每个符合condition条件元素的坐标,返回的是以元组的形式。


df['cycle'] = [2.0, 3.0, 6.0, 3.0, 5.0, 2.0, 7.0, 5.0]
#方法一:值相等
df[df['score'] == df['cycle']].index
#方法二:np.where()
np.where(df.score == df.cycle)

(array([2, 4, 6]),)


8.查找第一列的局部最大值位置:Numpy.sign()


#思路:查找比它前一个和后一个数字都大数字
data = {"grammer":['Python', 'C', 'Java', 'GO', 'css', 'SQL', 'PHP', 'Python'],
       "score":[1.0, 2.0, 6.0, 4.0, 5.0, 6.0, 7.0, 10.0]}
tem = np.diff(np.sign(np.diff(df['score'])))
np.where(tem == -2)[0] + 1


array([2])


9. 计算两列欧式距离:Numpy.linalg.norm()


#方法一:公式法
import math as mt
mt.sqrt(sum((df['score']-df['cycle'])**2))
#方法二:numpy函数
np.linalg.norm(df['score'] - df['cycle'])

6.6332495807108


10. numpy其他一些统计基础函数


np.min([1,2,3]) # 最小值
np.mean([1,2,3]) # 均值
np.median([1,2,3]) # 中位数
np.var([1,2,3]) # 方差
np.max([1,2,3]) # 最大值
np.ptp([1,2,3]) # 极差
np.std([1,2,3]) # 标准差
np.cov([1,2,3]) # 协方差
np.log1p([1,2,3]) # log(x + 1)
np.log2([1,2,3]) # 以2为底的对数
np.expm1([1,2,3]) # e的x次幂-1
np.exp([1,2,3]) # e的次数幂
np.log([1,2,3]) # 取对数
np.sqrt([1,2,3]) # 开根号
np.exp2([1,2,3]) # 平方


array([2., 4., 8.])


作业


STEP1: 按照下列要求创建数据框

已知10位同学的学号以及语数英三科成绩如下:(都是数值型数据)

914e75d1a39bada153e7ccedd4e5ad46_6e616a97241e484cb678c9b34f268e57.png

Id: [202001, 202002, 202003, 202004, 202005, 202006, 202007, 202008, 202009, 202010] Chinese: [98, 67, 84, 88, 78, 90, 93, 75, 82, 87] Math: [92, 80, 73, 76, 88, 78, 90, 82, 77, 69] English: [88, 79, 90, 73, 79, 83, 81, 91, 71, 78]


要求:计算出每位同学的总成绩(SumScore)、平均成绩(MeanScore),最高成绩(MaxScore)、最低成绩(MinScore)、最高成绩与最低成绩的极差(PtpScore)、成绩方差(VarScore);并将所有数据保存到score数据框中;将多列数据(包括学生的ID)合并到一列中,列名设置为answer,最终只保留索引id(从0到100)和answer两列,统一保留整数;


别人写的,挺好的

import pandas as pd
import numpy as np
data = {'Id': ['202001','202002','202003','202004','202005','202006','202007','202008','202009','202010'],
            'Chinese': ['98','67','84','88','78','90','93','75','82','87'],
            'Math': ['92','80','73','76','88','78','90','82','77','69'],
            'English': ['88','79','90','73','79','83','81','91','71','78']}
df = pd.DataFrame(data) # 字典转换为DF
df = df.astype('int') # object等格式转换为int
#运算
a = df[['Chinese', 'Math', 'English']].apply(np.sum, axis=1)
b = df[['Chinese', 'Math', 'English']].apply(np.mean, axis=1)
c = df[['Chinese', 'Math', 'English']].apply(np.max, axis=1)
d = df[['Chinese', 'Math', 'English']].apply(np.min, axis=1)
e = df[['Chinese', 'Math', 'English']].apply(np.ptp, axis=1)
f = df[['Chinese', 'Math', 'English']].var(axis='columns') # 查阅资料后得知,pandas df方差计算方法与numpy方差计算方法不一致
# 拼接共10列
df_concat = pd.concat([df['Id'], df['Chinese'], df['Math'], df['English'],a,b,c,d,e,f]) # 拼接列,series
df_concat = df_concat.astype('int')
print(df_concat)
df2 = pd.DataFrame() # 新建df2
df2['answer'] = df_concat # 新增列,数据来自拼接列
df2['id'] = range(len(df_concat)) # 新增列,并按照answer数量添加id


我写的,挺慢的

import numpy as np
import pandas as pd
data = {"Id": [202001, 202002, 202003, 202004, 202005, 202006, 202007, 202008, 202009, 202010],
"Chinese": [98, 67, 84, 88, 78, 90, 93, 75, 82, 87],
"Math": [92, 80, 73, 76, 88, 78, 90, 82, 77, 69],
"English": [88, 79, 90, 73, 79, 83, 81, 91, 71, 78]}
mydata = pd.DataFrame(data)
mydata['SumScore'] = mydata.loc[:,mydata.columns[1:4]].sum(axis=1)
mydata['MeanScore'] =  mydata.loc[:,mydata.columns[1:4]].sum(axis=1)/3
mydata['MaxScore'] = mydata.loc[:,mydata.columns[1:4]].max(axis=1)
mydata['MinScore'] = mydata.loc[:,mydata.columns[1:4]].min(axis=1)
mydata['PtpScore'] = np.ptp(mydata.loc[:,mydata.columns[1:4]],axis=1)
mydata['VarScore'] = mydata.loc[:,mydata.columns[1:4]].var(axis=1)
answer = pd.concat([mydata[c] for c in mydata.columns])
answer = answer.astype('int')
mydata1 = pd.DataFrame()
mydata1['answer'] = answer
mydata1['id'] = range(len(answer))
mydata1 = mydata1[['id','answer']]
print(mydata1)
mydata1.to_csv('answer_1.csv',index=False,encoding='utf-8-sig')

收获


  • 在 Pandas 中,有三种方法可以用来索引和选择数据:[]、.iloc 和 .loc。
    [] 是最基本的索引和选择数据的方法,它通常用于选择单个列或多个列。使用 [] 选择多个列时,需要将列名以列表的形式传递。
import pandas as pd
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': [7, 8, 9]
})
# 选择单个列
df['A']
# 输出:0    1
#      1    2
#      2    3
#      Name: A, dtype: int64
# 选择多个列
df[['A', 'B']]
# 输出:   A  B
#       0  1  4
#       1  2  5
#       2  3  6
  • .iloc 是按照整数位置(从 0 开始)进行索引和选择数据的方法。使用 .iloc 可以选择单个元素、行、列或者一个区域。选择行和列时可以用整数位置或者切片。
import pandas as pd
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': [7, 8, 9]
})
# 选择单个元素
df.iloc[0, 0]
# 输出:1
# 选择单个行
df.iloc[0]
# 输出:A    1
#      B    4
#      C    7
#      Name: 0, dtype: int64
# 选择单个列
df.iloc[:, 0]
# 输出:0    1
#      1    2
#      2    3
#      Name: A, dtype: int64
# 选择一个区域
df.iloc[0:2, 0:2]
# 输出:   A  B
#       0  1  4
#       1  2  5


.loc 是按照标签进行索引和选择数据的方法。使用 .loc 可以选择单个元素、行、列或者一个区域。选择行和列时必须使用标签。

import pandas as pd
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': [7, 8, 9]
})
# 选择单个元素
df.loc[0, 'A']
# 输出:1
# 选择单个行
df.loc[0]
# 输出:A    1
#      B    4
#      C    7
#      Name: 0, dtype: int64
# 选择单个列
df.loc[:, 'A']
# 输出:0    1
#      1    2
#      2    3
#      Name: A, dtype: int64
# 选择一个区域
df.loc[0:1, ['A', 'B']]
# 输出:   A  B
#       0 

相关文章
|
7月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
527 0
|
7月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
604 1
|
7月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
681 0
|
7月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
370 0
|
9月前
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
707 0
|
9月前
|
机器学习/深度学习 API 异构计算
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
JAX是Google开发的高性能数值计算库,旨在解决NumPy在现代计算需求下的局限性。它不仅兼容NumPy的API,还引入了自动微分、GPU/TPU加速和即时编译(JIT)等关键功能,显著提升了计算效率。JAX适用于机器学习、科学模拟等需要大规模计算和梯度优化的场景,为Python在高性能计算领域开辟了新路径。
896 0
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
434 1
|
机器学习/深度学习 数据处理 计算机视觉
NumPy实践宝典:Python高手教你如何轻松玩转数据处理!
【8月更文挑战第22天】NumPy是Python科学计算的核心库,专长于大型数组与矩阵运算,并提供了丰富的数学函数。首先需安装NumPy (`pip install numpy`)。之后可通过创建数组、索引与切片、执行数学与逻辑运算、变换数组形状及类型、计算统计量和进行矩阵运算等操作来实践学习。NumPy的应用范围广泛,从基础的数据处理到图像处理都能胜任,是数据科学领域的必备工具。
263 0
|
机器学习/深度学习 算法 数据可视化
8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征
特征工程是机器学习流程中的关键步骤,通过将原始数据转换为更具意义的特征,增强模型对数据关系的理解能力。本文重点介绍处理数值变量的高级特征工程技术,包括归一化、多项式特征、FunctionTransformer、KBinsDiscretizer、对数变换、PowerTransformer、QuantileTransformer和PCA,旨在提升模型性能。这些技术能够揭示数据中的潜在模式、优化变量表示,并应对数据分布和内在特性带来的挑战,从而提高模型的稳健性和泛化能力。每种技术都有其独特优势,适用于不同类型的数据和问题。通过实验和验证选择最适合的变换方法至关重要。
733 6
8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
419 3

热门文章

最新文章

推荐镜像

更多