【学习笔记】Python大数据处理与分析——pandas数据分析

一、pandas中的对象

1、Series对象

        由两个相互关联的数组(values, index)组成,前者(又称主数组)存储数据,后者存储values内每个元素对应关联的标签。

import numpy as np
import pandas as pd

s1 = pd.Series([1, 3, 5, 7])

print(s1)
→0    1
 1    3
 2    5
 3    7
 dtype: int64

print(s1.values)
→[1 3 5 7]

print(s1.index)
→RangeIndex(start=0, stop=4, step=1)

        通过NumPy数组导入Series对象:

arr1 = np.array([1, 3, 5, 7])
s2 = pd.Series(arr1, index=['a', 'b', 'c', 'd'])
s2_ = pd.Series(s2)

print(s2)
→a    1
 b    3
 c    5
 d    7
 dtype: int32

print(s2_)
→a    1
 b    3
 c    5
 d    7
 dtype: int32

        若index数组的值在字典中有对应的键,则生成的Series中对应的元素是字典中对应的值(如果没有,其值为NaN空值)。

dict1 = {"a": 3, "b": 4, "c": 5}
s3 = pd.Series(dict1, index=["a", "b", "c", "d"])

print(s3)
→a    3.0
 b    4.0
 c    5.0
 d    NaN
 dtype: float64

2、DataFrame对象

        将Series的使用场景扩展到多维,由按一定顺序的多列数据(可不同类型)组成,有两个索引数组(index, columns)。

dict2 = {"a": [1, 2, 3, 4], "b": [5, 6, 7, 8], "c": [9, 10, 11, 12]}
df1 = pd.DataFrame(dict2)

print(df1)
→  a  b   c
0  1  5   9
1  2  6  10
2  3  7  11
3  4  8  12

df2 = pd.DataFrame(np.arange(16).reshape((4, 4)),
                   index=["one", "two", "three", "four"],
                   columns=["ball", "pen", "pencil", "paper"])

print(df2)
→      ball  pen  pencil  paper
one       0    1       2      3
two       4    5       6      7
three     8    9      10     11
four     12   13      14     15

二、pandas的基本操作

1、导入与导出数据

(1)csv文件导入

        函数原型read_csv(filepath, sep, names, encoding),参数分别为:导入csv文件的路径、分隔符、导入的列和指定列的顺序(默认按顺序导入所有列)和文件编码(一般为utf-8)。

(2)txt文件导入

        read_table()的参数与read_csv()一样,但txt文件的分隔符不确定,所以参数设置需要更严格准确。

(3)Excel文件导入

        read_excel()的参数只有三个:路径名、读取表格名和读取列名,一般只需要第一个。

        示例如下,其中data.csv的内容如下:

        data.txt的内容如下:

        data.xlsx的内容如下:

df3 = pd.read_csv(r"D:\Pycharm professional\pythonProject\test_pandas_files\data.csv")

print(df3)
→   0   1   2
0   1   2   3
1   4   5   6
2   7   8   9
3  10  11  12

df4 = pd.read_table(r"D:\Pycharm professional\pythonProject\test_pandas_files\data.txt", sep=' ', header=None)

print(df4)
→  0   1
0  1   2
1  3   4
2  5   6
3  7   8
4  9  10

df5 = pd.read_excel(r"D:\Pycharm professional\pythonProject\test_pandas_files\data.xlsx")

print(df5)
→  0  1  2  3
0  a  b  c  d
1  e  f  g  h
2  i  j  k  l

 (4)数据导出

        函数原型为to_csv(filepath, sep, names, encoding),参数分别为:导出csv文件的路径、分隔符(默认为逗号)、是否输出索引(默认为True,即输出索引)和文件编码(一般为utf-8)。

df3.to_csv(r"D:\Pycharm professional\pythonProject\test_pandas_files\data1.csv", index=True, header=True)
df3.to_csv(r"D:\Pycharm professional\pythonProject\test_pandas_files\data2.csv", index=False, header=True)

        data1.csv的内容如下: 

        data2.csv的内容如下: 

2、数据的查看与检查

(1)Series对象

print(s1[2])
→5

print(s2['c'])
→5

print(s2[0:2])
→a    1
 b    3
 dtype: int32

print(s2[['a', 'b']])
→a    1
 b    3
 dtype: int32

(2)DataFrame对象

print(df2.columns)
→Index(['ball', 'pen', 'pencil', 'paper'], dtype='object')

print(type(df2.columns))
→<class 'pandas.core.indexes.base.Index'>

print(df2.index)
→Index(['one', 'two', 'three', 'four'], dtype='object')

print(type(df2.index))
→<class 'pandas.core.indexes.base.Index'>

print(df2.values)
→[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]

print(type(df2.values))
→<class 'numpy.ndarray'>

print(df2["pencil"])
→one       2
 two       6
 three    10
 four     14
 Name: pencil, dtype: int32

print(df2.pen)
→one       1
 two       5
 three     9
 four     13
 Name: pen, dtype: int32

print(df2[0:2])
→    ball  pen  pencil  paper
one     0    1       2      3
two     4    5       6      7

3、数据的增删查改

        创建Series对象如下:

s4 = pd.Series([1, 3, 5, 7], index=['a', 'b', 'c', 'd'])

(1)增加

s4['e'] = 9
print(s4)
→a    1
 b    3
 c    5
 d    7
 e    9
 dtype: int64

(2)删除

s4.pop('e')
print(s4)
→a    1
 b    3
 c    5
 d    7
 dtype: int64

print(s4.drop('c'))
→a    1
 b    3
 d    7
 dtype: int64

print(s4)
→a    1
 b    3
 c    5
 d    7
 dtype: int64

(3)查找与修改

s4[2] = 6
s4['a'] = 0
print(s4)
→a    0
 b    3
 c    6
 d    7
 dtype: int64

print(s4[s4 > 4])
→c    6
 d    7
 dtype: int64

df2["pencil"][1] = 12
print(df2)
→      ball  pen  pencil  paper
one       0    1       2      3
two       4    5      12      7
three     8    9      10     11
four     12   13      14     15

4、pandas的基本运用

(1)数据统计

        创建DataFrame对象如下:

arr2 = np.array([1, 2, 3, 4, 5, 6, 7, 8]).reshape(4, 2)
df6 = pd.DataFrame(arr2, index=['a', 'b', 'c', 'd'], columns=['one', 'two'])
print(df6)
→  one  two
a    1    2
b    3    4
c    5    6
d    7    8
① 求和
print(df6.sum())
→one    16
 two    20
 dtype: int64

print(df6.sum(axis=1))
→a     3
 b     7
 c    11
 d    15
 dtype: int64
② 累计求和
print(df6.cumsum())
→  one  two
a    1    2
b    4    6
c    9   12
d   16   20
③ 返回最值行名称
print(df6.idxmax())
→one    d
 two    d
 dtype: object

print(df6.idxmin())
→one    a
 two    a
 dtype: object
④ 去重

        unique()返回NumPy数组,value_counts()返回Series对象(index为不重复的元素,values为不重复元素的频数)。

s5 = pd.Series([1, 3, 5, 7, 2, 4, 3, 5, 7, 6, 7])

print(s5.unique())
→[1 3 5 7 2 4 6]

print(type(s5.unique()))
→<class 'numpy.ndarray'>

print(s5.value_counts())
→7    3
 3    2
 5    2
 1    1
 2    1
 4    1
 6    1
 dtype: int64

print(type(s5.value_counts()))
→<class 'pandas.core.series.Series'>
⑤ 筛选数据

        isin()判定Series对象中每个元素是否包含在给定的参数中。

print(s5.isin([2, 4]))
→0     False
 1     False
 2     False
 3     False
 4      True
 5      True
 6     False
 7     False
 8     False
 9     False
 10    False
 dtype: bool

print(s5[s5.isin([2, 4])])
→4    2
 5    4
 dtype: int64

(2)算术运算

s6 = pd.Series([20, 40, 60, 80])

print(s6 / 2)
→0    10.0
 1    20.0
 2    30.0
 3    40.0
 dtype: float64

print(np.log(s6))
→0    2.995732
 1    3.688879
 2    4.094345
 3    4.382027
 dtype: float64

(3)数据对齐

        数据清洗的重要过程,可按索引进行对齐运算,没对齐的位置填充NaN,数据末尾也可填充NaN。

s7 = pd.Series({"b": 4, "c": 5, "a": 3})
s8 = pd.Series({"a": 1, "b": 7, "c": 2, "d": 11})

print(s7 + s8)
→a     4.0
 b    11.0
 c     7.0
 d     NaN
 dtype: float64

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux LVM与磁盘配额

目录 一.LVM概述 LVM LVM机制的基本概念 PV&#xff08;Physical Volume&#xff0c;物理卷&#xff09; VG&#xff08;Volume Group&#xff0c;卷组&#xff09; LV&#xff08;Logical Volume&#xff0c;逻辑卷&#xff09; 二.LVM 的管理命令 三.创建并使用LVM …

AutoPSA中推荐用户使用仿CII计算

Q:请问未知错误。优易AUtoPSAInDon3.app1670行是什么原因呢&#xff1f;如下图&#xff1a; A: 这是老的仿GLIF算法&#xff0c;遇到特殊情况有这个提示&#xff0c;建议使用仿CAESARII算法。

车载摄像头视频防抖处理解决方案,全新的稳定视觉体验

面对复杂多变的道路环境和车辆运动状态&#xff0c;如何确保车载摄像头拍摄的视频稳定清晰&#xff0c;一直是行业面临的重要挑战。美摄科技&#xff0c;作为视频防抖技术的领军企业&#xff0c;以其领先的车载摄像头视频防抖处理解决方案&#xff0c;为企业提供了全新的稳定视…

C++ - 文件流fstream

C 文件流是指在C编程中使用的用于文件输入输出操作的机制。这种机制允许程序员以类似于流的方式读取和写入文件数据。在C中&#xff0c;文件流通常使用<fstream>头文件提供的类来实现。 常用的文件流类包括&#xff1a; 1. std::ofstream&#xff1a;用于向文件中写入数…

筑牢个人信息安全防线,海云安受邀参加武汉“名家论坛”国家安全教育日专题讲座

近日&#xff0c;武汉“名家论坛”国家安全教育日专题讲座活动《“刷脸”有风险&#xff0c;如何保护我们的个人信息安全&#xff1f;》在武汉图书馆报告厅举办&#xff0c;海云安副总工程师李博士受邀参加本次活动。 活动以线下讲座、线上直播的形式&#xff0c;结合“普法讲座…

rk3588 安卓调试

rknn装上了android系统&#xff0c;用type-c usb连接上电脑&#xff0c;设备管理器发现了rk3588&#xff0c;但是Android Studio没有发现设备 后来怀疑是驱动没有安装&#xff0c;我用的驱动下载地址&#xff1a; 瑞芯微Rockchip驱动安装助手(适用于RK3308 RK3399等) Mcuzone…

H2O-3机器学习平台源码编译的各种坑

H2O-3机器学习平台是一个非常适合非专业人士学习机器学习的平台&#xff0c;自带WebUI&#xff0c;效果还是蛮不错的&#xff0c;官方也提供了jar包&#xff0c;一条命令就能直接运行&#xff0c;非常方便&#xff0c;但最近有源码编译的需求&#xff0c;实际操作过程中&#x…

error: failed to push some refs to ‘https://gitee.com/zhao-zhimin12/gk.git‘

git push origin master发现以下报错: 解决办法: 一、强制推送 git push origin master -f &#xff08;加上 -f 就是强制&#xff09; 二、 先拉取最新代码&#xff0c;再推送 1.git pull origin master 2.git push origin master

OpenHarmony实战开发-如何使用ArkUIstack 组件实现多层级轮播图。

介绍 本示例介绍使用ArkUIstack 组件实现多层级轮播图。该场景多用于购物、资讯类应用。 效果图预览 使用说明 1.加载完成后显示轮播图可以左右滑动。 实现思路 1.通过stack和offsetx实现多层级堆叠。 Stack() {LazyForEach(this.swiperDataSource, (item: SwiperData, i…

基于51单片机的心形流水灯设计

基于51单片机的心形流水灯 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.采用51单片机做为主控制器&#xff1b; 2.32个彩色&#xff2c;&#xff25;&#xff24;接在单片机的32个双向&#xff29…

机器人码垛机的技术特点与应用

随着科技的飞速发展&#xff0c;机器人技术正逐渐渗透到各个行业领域&#xff0c;其中&#xff0c;机器人码垛机在物流行业的应用尤为引人瞩目。它不仅提高了物流效率&#xff0c;降低了成本&#xff0c;更在改变传统物流模式的同时&#xff0c;为行业发展带来了重大的变革。 一…

通过钉钉发送消息

1、通过钉钉群添加一个机器人 2、代码实现 /*** 发钉钉审核.** param*/private void sendDingDing(PoMaster poMaster){if(poMaster.getTotalPrice().doubleValue() > 500){String url "https://oapi.dingtalk.com/robot/send?access_tokene11bbb694ad4425bf687d2e…

冯喜运:4.17昨日黄金完美区间多空通杀,今日黄金原油分析

【黄金走势分析 】&#xff1a;黄金昨日整体过山车&#xff0c;早盘黄金冲高2392一线后回落&#xff0c;价格在2379-2389区间震荡&#xff0c;午后区间下移&#xff0c;价格在2362-2380继续震荡&#xff0c;晚间价格再次触及2363支撑反弹&#xff0c;连阳上升突破早间高点&…

数据结构速成--栈

由于是速成专题&#xff0c;因此内容不会十分全面&#xff0c;只会涵盖考试重点&#xff0c;各学校课程要求不同 &#xff0c;大家可以按照考纲复习&#xff0c;不全面的内容&#xff0c;可以看一下小编主页数据结构初阶的内容&#xff0c;找到对应专题详细学习一下。 目录 一…

信号量理论

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 理论 信号量是对公共资源的一种预定机制&#xff0c;资源不一定非要持有才算自己的&#xff0c;预定了也算&#xff0c;在未来任意时刻&#xff0c;仍然可以使用。 像我们申请有一块共享内存&#xff0c;如果一个进程正在使…

HTML5 <video> 标签属性、API 方法、事件、自定义样式详解与实用示例

HTML5 <video> 标签为网页内嵌视频提供了强大且便捷的功能。以下是对 <video> 标签的主要属性、API 方法、事件、自定义样式及其使用示例的详细介绍&#xff1a; 一、属性 1. src 定义&#xff1a;指定视频文件的 URL。示例&#xff1a;<video src"my_v…

树莓派驱动开发--iic篇(JY901S陀螺仪的三轴角度简单读取)

前言&#xff1a;既然大家都到了这步&#xff0c;想必对驱动开发有着一定的理解啦吧&#xff01;&#xff01;那我在前面说一下流程&#xff1a; 修改编译设备树》》》编写编译驱动文件》》》编写编译app文件》》》ftp挂载将前面3复制到树莓派的对应位置》》》加载驱动模块》》…

代码随想录训练营Day 24|Python|Leetcode|93.复原IP地址, 78.子集,90.子集II

93.复原IP地址 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址&#xff0c;但是 &q…

✌粤嵌—2024/4/3—合并K个升序链表✌

代码实现&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* merge(struct ListNode *l1, struct ListNode *l2) {if (l1 NULL) {return l2;}if (l2 NULL) {return l1;}struct Lis…

【Android GUI】从总体上了解Android的GUI体系

文章目录 概览Android硬件接口HALGralloc与Framebuffer Gralloc模块的加载Gralloc提供的接口Android原生的Gralloc实现打开framebuffer设备打开gralloc设备 参考 概览 Linux内核提供了统一的framebuffer显示驱动。设备节点/dev/graphics/fb*或者/dev/fb*&#xff0c;其中fb0表示…