【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 

相关文章
|
11天前
|
监控 物联网 数据处理
Pandas高级数据处理:数据流式计算
本文介绍了如何使用 Pandas 进行流式数据处理。流式计算能够实时处理不断流入的数据,适用于金融交易、物联网监控等场景。Pandas 虽然主要用于批处理,但通过分块读取文件、增量更新 DataFrame 和使用生成器等方式,也能实现简单的流式计算。文章还详细讨论了内存溢出、数据类型不一致、数据丢失或重复及性能瓶颈等常见问题的解决方案,并建议在处理大规模数据时使用专门的流式计算框架。
138 100
Pandas高级数据处理:数据流式计算
|
6天前
|
数据可视化 数据挖掘 数据处理
Pandas高级数据处理:交互式数据探索
Pandas 是数据分析中常用的数据处理库,提供了强大的数据结构和操作功能。本文从基础到高级,逐步介绍 Pandas 中交互式数据探索的常见问题及解决方案,涵盖数据读取、检查、清洗、预处理、聚合分组和可视化等内容。通过实例代码,帮助用户解决文件路径错误、编码问题、数据类型不一致、缺失值处理等挑战,提升数据分析效率。
76 32
|
4天前
|
数据采集 数据可视化 数据处理
Pandas高级数据处理:数据仪表板制作
《Pandas高级数据处理:数据仪表板制作》涵盖数据清洗、聚合、时间序列处理等技巧,解决常见错误如KeyError和内存溢出。通过多源数据整合、动态数据透视及可视化准备,结合性能优化与最佳实践,助你构建响应快速、数据精准的商业级数据仪表板。适合希望提升数据分析能力的开发者。
58 31
|
7天前
|
存储 安全 数据处理
Pandas高级数据处理:数据安全与隐私保护
在数据驱动的时代,数据安全和隐私保护至关重要。本文探讨了使用Pandas进行数据分析时如何确保数据的安全性和隐私性,涵盖法律法规要求、用户信任和商业价值等方面。通过加密、脱敏、访问控制和日志审计等技术手段,结合常见问题及解决方案,帮助读者在实际项目中有效保护数据。
52 29
|
1天前
|
数据挖掘 数据处理 开发者
Pandas高级数据处理:实时数据处理
本文介绍了Pandas在实时数据处理中的应用,涵盖基础概念、常见问题及解决方案。Pandas是Python中强大的数据分析库,支持流式读取和增量更新数据,适用于大规模数据集的处理。通过分块读取、数据类型优化等方法,可有效解决内存不足等问题。文中还提供了代码示例,帮助读者更好地理解和掌握Pandas在实时数据处理中的使用技巧。
33 15
|
8天前
|
存储 安全 数据处理
Pandas高级数据处理:数据加密与解密
本文介绍如何使用Pandas结合加密库(如`cryptography`)实现数据加密与解密,确保敏感信息的安全。涵盖对称和非对称加密算法、常见问题及解决方案,包括密钥管理、性能优化、字符编码和数据完整性验证。通过示例代码展示具体操作,并提供常见报错的解决方法。
47 24
|
10天前
|
存储 算法 数据处理
Pandas高级数据处理:数据压缩与解压
本文介绍 Pandas 中的数据压缩与解压技术,探讨其在大数据集存储、远程传输和备份归档中的应用场景。Pandas 支持多种压缩格式(如 `.gzip`、`.bz2`、`.zip`),通过 `compression` 参数轻松实现数据的压缩与解压。文中还提供了常见问题的解决方案,如文件扩展名不匹配、内存不足和性能优化,并介绍了自动检测压缩格式和组合压缩加密的高级技巧。掌握这些功能可显著提升数据处理效率。
46 20
|
5天前
|
数据采集 并行计算 数据可视化
Pandas高级数据处理:数据报告生成实战指南
数据报告生成面临数据质量、计算性能、呈现形式和自动化等核心挑战。常见问题包括缺失值导致统计失真、内存溢出及可视化困难。解决方案涵盖数据清洗、分块处理、安全绘图模板等。通过模块化设计、异常处理机制和性能优化策略,如使用`category`类型、并行计算等,可大幅提升效率。最佳实践建议建立数据质量检查清单、版本控制和自动化测试框架,确保系统具备自适应能力,提升报告生成效率300%以上。
38 12
|
1天前
|
Python
python pandas学习(一)
该代码段展示了四个主要操作:1) 删除指定列名,如商品id;2) 使用正则表达式模糊匹配并删除列,例如匹配订单商品名称1的列;3) 将毫秒级时间戳转换为带有时区调整的日期时间格式,并增加8小时以适应本地时区;4) 将列表转换为DataFrame后保存为Excel文件,文件路径和名称根据变量拼接而成。
12 3
|
12天前
|
数据采集 数据挖掘 物联网
Pandas高级数据处理:实时数据处理
本文介绍了如何使用Pandas进行实时数据处理,涵盖从基础到高级的技巧。Pandas作为Python中流行的数据处理库,提供了高效的DataFrame和Series结构,适用于金融、社交媒体和物联网等领域的数据分析。文章详细讲解了数据读取、清洗、转换及常见问题的解决方案,如内存不足、数据不一致和性能瓶颈,并提供了避免常见报错的方法,帮助读者更高效地处理实时数据。
53 15

推荐镜像

更多