Pandas简单使用

简介: Pandas简单使用


Pandas简单使用

Pandas最核心的两个数据结构是一维的Series和二维的DataFrame

  • Series是带有标签的同构类型数组
  • DataFrame是一个二维的表结构
    在同构类型的数据中,一个DataFrame可以看作是由多个Series组成的。
数据读取和存储

Pandas是处理结构化数据非常重要的一个工具,其功能强大且好用。

Pandas可以从CSV、JSON、Text等格式文件中读取数据。

CSV文件的读取和存储

对CSV文件进行操作有两个接口(API),分别是read_csv和to_csv。

  1. read_csvread_csv()是用来读取CSV文件的接口,其具有丰富的参数,可以配置来满足实际的数据读取需要
  • filepath_or_buffer:配置所需读取CSV文件的路径
  • sep:配置CSV文件的列分隔符,默认是逗号“, ”
  • delimiter:可选配置,作为sep配置分隔符的别名
  • delim_whitespace:配置是否用空格来作为列分隔符。如果设置为True,那么sep配置参数就不起作用了。
  • header:配置用列数来作为列名,默认配置成自动推断。
  • names:配置列名,如果所读取的CSV文件没有表头,那么需要配置header=None,否则会将第一行数据作为对应的列名。
  • usecols:当只需要读取CSV文件中的部分数据时,可以使用usecols来指定读取列名以获取数据。
  • dtype:配置所读取数据的类型
  • encoding:配置文件的编码方式,一般使用UTF-8或者GBK
  1. to_csvto_csv()用于将数据保存到CSV文件中。其参数比较多,但只有第一个参数是必需的。
  1. path_or_buf:配置CSV文件的保存路径
  2. sep:配置保存文件的分隔符,默认是逗号“, ”
  3. na_rep:配置空值补全的值,默认用空格代替
  4. float_format:配置将浮点数格式化成字符串类型
  5. columns:配置需要写入列的列名,如果不配置,则默认从第1列开始写入
  6. header:配置是否写入列名,默认是需要写的
  7. index:配置是否写入行名,默认是需要写的
  8. index_label:配置用来作为列索引的列,默认是没有的
  9. mode:配置写入模式,默认是W
  10. encoding:配置编码格式,该配置只针对Python 3以前的版本
  11. line_terminator:配置每行的结束符,默认使用“\n”
  12. quotin:配置CSV的引用规则
  13. quotechar:配置用来作为引用的字符,默认是空格
  14. chunksize:配置每次写入的行数
  15. tuplesize_cols:配置写入list的格式,默认以元组的方式写入
  16. date_format:配置时间数据的格式
JSON文件的读取和存储

对JOSN文件进行操作有两个API,分别是read_json和to_json

  1. read_json()read_json()是用于读取JSON文件或者返回JSON数据的接口,需要用到的配置参数如下
  1. filepath_or_buffer:配置有效的JSON字符串、JSON文件的路径或者数据接口。数据接口可以是一个URL地址。
  2. type:配置将读取的数据生成Series还是DataFrame,默认是DataFrame
  1. to_json()to_json()用于将数据保存为JSON格式。需要用到的配置参数如下:
  1. path_or_buf:配置JSON数据保存的路径或者写入的内存区域
  2. date_format:配置时间数据的格式,epoch表示配置成时间戳的格式,iso表示配置成ISO 8601的格式
  3. double_precision:配置小数点后保留的位数,默认是10位
  4. force_ascii:配置是否强制将String转码成ASCII,默认强制进行转码
  5. date_unit:配置时间数据的格式,可以实现精确到秒级或毫秒级
数据查看和选取

Pandas的数据对象有Series、DataFrame和Panel,常用的数据类型是一维的Series和二维的DataFrame。DataFrame拥有非常丰富的API,能够满足对数据选取和处理的需求。

查看数据
  1. df.shape
    df.shape用于查看数据的维度。由于DataFrame是二维的,因此df.shape的返回值包含两个元素,df.shape[0]返回的是行数,df.shape[1]返回的是列数。
import pandas as pd 
dict={'cpu':'8c', 'memory':'64G'} 
df=pd.DataFrame(dict, index=[0])
print(df)
print(df.shape[0]) 
print(df.shape[1]) 
######
  cpu memory
0  8c    64G
1
2
  1. df.head()
    df.head()默认返回DataFrame数据的前5行,如果需要查看更多的行数,则只要传参进去即可。df.tail()默认返回数据的后5行,想要查看更多的数据同样可以传参进去。
    查看数据的汇总统计可以使用df.describe(),查看数据概况可以使用df.info。
import pandas as pd 
dict=[{'cpu':'8c', 'memory':'64G'}, {'cpu':'12c', 'memory':'64G'}] 
df=pd.DataFrame(dict, index=[0,1])
print("--------------------")
print(df.head(2)) #查看前两行数据 
print("--------------------")
print(df.tail(1)) #查看最后一行数据 
print("--------------------")
print(df.describe()) #查看数据的汇总统计 
print("--------------------")
print(df.info()) #查看数据概况 
######
--------------------
   cpu memory
0   8c    64G
0  12c    64G
--------------------
   cpu memory
0  12c    64G
--------------------
       cpu memory
count    2      2
unique   2      1
top     8c    64G
freq     1      2
--------------------
<class 'pandas.core.frame.DataFrame'>
Int64Index: 2 entries, 0 to 0
Data columns (total 2 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   cpu     2 non-null      object
 1   memory  2 non-null      object
dtypes: object(2)
memory usage: 48.0+ bytes
None
  1. 想要查看列名可以使用df.columns.values,查看各列的平均值可以直接用df.mean()。
import pandas as pd 
dict=[{'cpu':1000, 'memory':2000}, {'cpu':3000, 'memory':500}] 
df=pd.DataFrame(dict, index=[0,1])
print(df.columns.values)
print(df.mean())
#######
['cpu' 'memory']
cpu       2000.0
memory    1250.0
dtype: float64
选取数据

在选取数据时,既可以使用列名来选取,也可以使用索引来选取。

如果要查看某列的数据,则可以用df[col_name]或者df.col_name,当查看多列时可以将多列的列名作为一个数组传参进去,如df[[col1, col2]]。

使用索引来选取数据,则要用到df.iloc。要注意 df.loc和df.iloc在使用上是有区别的,df.loc传递的是索引的名称,df.iloc传递的是索引的相对位置,常用的是df.iloc。

import pandas as pd 
dict=[{'cpu':'8c', 'memory':'64G'}, {'cpu':'12c', 'memory':'64G'}] 
df=pd.DataFrame(dict, index=[0,1])
print(df.iloc[1]) #iloc是取的索引的相对位置,即DataFrame的第二行元素 
print("---------------")
print(df.loc[0]) #loc是取的行索引的名称 
print("---------------")
print(df['memory']) #通过列名查看数据 
print("---------------")
print(df.cpu) #通过列名查看数据,使用的是“.”访问方式 
######
cpu       12c
memory    64G
Name: 1, dtype: object
---------------
cpu        8c
memory    64G
Name: 0, dtype: object
---------------
0    64G
1    64G
Name: memory, dtype: object
---------------
0     8c
1    12c
Name: cpu, dtype: object
数据处理

Pandas DataFrame提供了丰富的数据处理方法,为进行必要的数据操作和预处理提供了非常大的帮助

数据合并

在进行数据预处理时,需要进行必要的数据合并操作,将分散的数据或者部分数据整合到一起。

DataFrame提供了多个数据拼接的方法,使用pd.concat()可以直接放到数组中按行拼接,也可以使用pd.merge()按列拼接,或者使用df.append()增加某列数据

import pandas as pd 
dict=[{'cpu':'8c', 'memory':'64G'}, {'cpu':'12c', 'memory':'64G'}] 
df=pd.DataFrame(dict, index=[0,1])
print(df)
print("-----")
pie=[df, df] 
df2=pd.concat(pie) #按行拼接,也就是说,数据在行的方向上进行增加 
print(df2)
print("-----")
df3=pd.merge(df2, df, on='cpu')
#按列cpu进行拼接。发现会在拼接后的df3中增加一列,且列名变成了memory_x, memory_y 
print(df3)
######
   cpu memory
0   8c    64G
1  12c    64G
-----
   cpu memory
0   8c    64G
1  12c    64G
0   8c    64G
1  12c    64G
-----
   cpu memory_x memory_y
0   8c      64G      64G
1   8c      64G      64G
2  12c      64G      64G
3  12c      64G      64G
数据清理

在使用DataFrame进行数据处理时,如果数据质量不高,则需要清理一些空值或者进行空值补全。

可以使用df3.isnull()检查数据是否为空值,使用df3.isnull().sum()进行空值的统计。

如果需要对空值进行补全,则可以使用df3.fillna(n), n值就是替换空值的值。

如果想要去掉所有带有空值的数据,则可以使用df3.dropna()删除包含空值的行和列,默认删除包含空值的行。df3.dropna(axis=1)会删除包含空值的列

import pandas as pd 
dict=[{'cpu':'8c', 'memory':'64G'}, {'cpu':'12c', 'memory':'64G'},{'cpu':'16c', 'memory':None}] 
df=pd.DataFrame(dict, index=[0,1,2])
print(df)
print("-------------")
print(df.isnull())#判断df中为空值的元素,返回的是整个df的空值判断结果分布 
print("-------------")
print(df.isnull().sum())#统计df中空值元素的个数,返回的是按列统计结果 
print("-------------")
print(df.fillna('32G'))
#对df中的空值元素用32G进行空值补全。
#注意,这里的补全只是对返回结果的补全,对df中的原始空值并不改变,这个同样适用于df.dropna() 
print("-------------")
print(df) #可以看到df中的空值并没有改变 
print("-------------")
print(df.dropna()) 
print("-------------")
print(df.dropna(axis=1))
######
   cpu memory
0   8c    64G
1  12c    64G
2  16c   None
-------------
     cpu  memory
0  False   False
1  False   False
2  False    True
-------------
cpu       0
memory    1
dtype: int64
-------------
   cpu memory
0   8c    64G
1  12c    64G
2  16c    32G
-------------
   cpu memory
0   8c    64G
1  12c    64G
2  16c   None
-------------
   cpu memory
0   8c    64G
1  12c    64G
-------------
   cpu
0   8c
1  12c
2  16c
数据处理

在进行数据处理时,还会遇到诸如转换数据类型、统计唯一值的个数以及序列排序等需求。

DataFrame也提供了一些对应的操作方法供使用,比如,转换数据类型可以使用df.astype(),统计唯一值的个数可以使用df.columns.value_counts(),序列排序可以使用df.sort_values(by= colname, ascending=True)

import pandas as pd 
dict=[{'cpu':8, 'memory':'64G'}, {'cpu':12, 'memory':'64G'},{'cpu':16, 'memory':None}] 
df=pd.DataFrame(dict, index=[0,1,2])
print(df)
print("-------------")
print(df['cpu'].astype(float))
#对指定列进行数据类型转换,将cpu列的类型 
#从int转换为float。如df.fillna()一样,这个操作并不会改变df中的原始值 
#而是将df复制了一份进行相应的数据转换后返回 
print("-------------")
print(df["memory"].value_counts())
#对df["memory"]中的数据进行次数统计,返回统计结果 
# df.value_counts() 统计行出现得次数
print("-------------")
print(df.sort_values(by='cpu', ascending=False)) #按照cpu列的元素值大小 
######
   cpu memory
0    8    64G
1   12    64G
2   16   None
-------------
0     8.0
1    12.0
2    16.0
Name: cpu, dtype: float64
-------------
64G    2
Name: memory, dtype: int64
-------------
   cpu memory
2   16   None
1   12    64G
0    8    64G
相关文章
|
8月前
|
人工智能 安全 调度
一文详解容器面向大模型与AI Agent的技术变革
在生成式人工智能迅猛发展的浪潮下,企业应用正加速从模型研究走向业务落地。无论是大规模的数据处理、超大参数模型的训练与推理,还是部署能够自动完成任务的AI Agent,这些场景都需要稳定、高效且可弹性伸缩的资源调度与管理能力。 容器凭借环境一致性、跨平台部署和高效调度等优势,天然契合AI场景对多样化算力、快速迭代和规模化分发的要求,成为AI时代事实上的原生基石。然而,要满足在生产规模下的需求,产品及技术形态需随之演进。 基于这一背景,本文将围绕大规模数据处理、模型训练、模型推理与AI Agent四个关键阶段,探讨AI场景对容器的核心需求,以及容器如何在各环节实现技术演进与升级。
773 2
一文详解容器面向大模型与AI Agent的技术变革
|
8月前
|
资源调度 前端开发 小程序
前端UI框架介绍mpvue WeUI Express Koa NPM YARN
前端UI框架介绍mpvue WeUI Express Koa NPM YARN
327 108
|
Prometheus 监控 Cloud Native
解决Spring Boot中的性能监控与调优
解决Spring Boot中的性能监控与调优
|
负载均衡 监控 应用服务中间件
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
818 61
|
机器学习/深度学习 人工智能 自然语言处理
什么是智能搜索
智能搜索融合了人工智能和大数据技术,提供高效的语义理解、多模态数据处理及个性化推荐。它不仅支持传统关键词匹配,还结合NLP、机器学习等先进技术,提升信息检索的精准度与多样性。适用于电商、内容平台、多媒体及企业内部知识库等多种场景,显著优化用户体验和业务效率。
2199 2
|
存储 人工智能 算法
大语言模型的优化及基于Intel® Extension for Transformers 的部署实践
本次分享的主题是大语言模型的优化及基于Intel® Extension for Transformers 的部署实践,由曹慧燕分享。主要分为四个部分: 1. Intel® Extension for Transformers Overview 2. Optimizations 3. Neural Chat 4. Demo
590 1
|
数据挖掘 索引 Python
python_DataFrame的loc和iloc取数据 基本方法总结
python_DataFrame的loc和iloc取数据 基本方法总结
2858 0
python_DataFrame的loc和iloc取数据 基本方法总结
|
Java Maven
idea安装并使用maven依赖分析插件:Maven Helper
idea安装并使用maven依赖分析插件:Maven Helper
6246 7
|
JavaScript
【Vue面试题八】、为什么data属性是一个函数而不是一个对象?
这篇文章解释了为什么在Vue中组件的`data`属性必须是一个函数而不是一个对象。原因在于组件可能会有多个实例,如果`data`是一个对象,那么这些实例将会共享同一个`data`对象,导致数据污染。而当`data`是一个函数时,每次创建组件实例都会返回一个新的`data`对象,从而确保了数据的隔离。文章通过示例和源码分析,展示了Vue初始化`data`的过程和组件选项合并的原理,最终得出结论:根实例的`data`可以是对象或函数,而组件实例的`data`必须为函数。
【Vue面试题八】、为什么data属性是一个函数而不是一个对象?
|
Linux 开发工具
Linux yum 使用时提示 获取 GPG 密钥失败Couldn‘t open file RPM-GPG-KEY-EPEL-7
Linux yum 使用时提示 获取 GPG 密钥失败Couldn‘t open file RPM-GPG-KEY-EPEL-7
662 2

热门文章

最新文章