当前位置: 首页 > news >正文

pandas(12 IO工具和稀松数据)

前面内容:pandas(11 分类数据和数据可视化)

目录

一、Python Pandas IO工具

1.1  read_csv() 和 read_table() 

1.2  CSV 文件

 二、Python Pandas 稀疏数据

 2.1 SparseDtype() 

 2.2 density和dense

2.3 稀疏数据类型


一、Python Pandas IO工具

Pandas I/O API 是一组顶级读取函数,可以像 pd.read_csv() 一样访问,通常返回一个Pandas对象。

读取文本文件(或平面文件)的两个核心函数是 read_csv() 和 read_table() 。它们都使用相同的解析代码,智能地将表格数据转换为 DataFrame 对象 –

1.1  read_csv() 和 read_table() 

read_csv() : 

pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer',
names=None, index_col=None, usecols=None

read_table() : 

pandas.read_csv(filepath_or_buffer, sep='\t', delimiter=None, header='infer',
names=None, index_col=None, usecols=None

1. filepath_or_buffer

  • 作用:指定要读取的文件路径或文件对象。

  • 类型:字符串或 path-like 对象。

  • 示例"data.csv"r"c:\path\to\file.csv"

2. sepdelimiter

  • 作用:指定分隔符。它用于分隔每一列的数据。sepdelimiter 是可以互换的参数,sepread_csv() 的标准参数,delimiter 只是别名。

  • 默认值,(逗号)。

  • 示例

    • sep=',' 适用于标准的 CSV 文件。

    • sep='\t' 适用于以制表符(Tab)分隔的文件(TSV 文件)。

    • sep=';' 适用于以分号分隔的文件。

3. header

  • 作用:指定哪一行是列名。如果设置为 None,则默认从文件的第一行读取列名。

  • 默认值'infer',表示自动推断列名(即文件的第一行作为列名)。

  • 示例

    • header=0:使用文件的第一行作为列名。

    • header=None:不使用文件的任何行作为列名,并且会自动生成默认列名。

    • header=1:将文件的第二行作为列名。

4. names

  • 作用:指定列名。如果 header=None,则必须提供此参数来指定列名。

  • 类型:列表或数组,包含列名的字符串。

  • 示例

    names=['Column1', 'Column2', 'Column3']

5. index_col

  • 作用:指定哪一列作为行索引。可以是列的名称或列的索引(0-based)。

  • 默认值None,表示没有指定索引列。

  • 示例

    • index_col=0:使用文件中的第一列作为索引。

    • index_col='ID':使用名为 'ID' 的列作为索引。

6. usecols

  • 作用:指定要读取的列的名称或索引,可以是一个列表。如果你只想读取数据文件中的一部分列,可以使用此参数来选择特定的列。

  • 类型:列表、字符串或 None

  • 示例

    • usecols=['A', 'B', 'C']:只读取列 ABC

    • usecols=[0, 2, 3]:只读取索引为 0、2 和 3 的列。

1.2  CSV 文件

 例1:创建 CSV 文件

import pandas as pd

# 创建一个 DataFrame
temp = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [25, 30, 35, 40],
    'City': ['New York', 'Los Angeles', 'Chicago', 'Houston'],
    'Salary' :[2000,3000,5000,8000]
}

df = pd.DataFrame(temp)

# 将 DataFrame 保存为 CSV 文件
df.to_csv('temp.csv', index=False)  # `index=False` 避免将行索引写入文件

 例2:读取csv

df=pd.read_csv("temp.csv")
print(df)

运行结果:

例3:自定义索引

df_with_index = pd.read_csv("temp.csv", index_col='Name')
print(df_with_index)

运行结果:

 

例4:转换数据类型

df = pd.read_csv("temp.csv", dtype={'Salary': np.float64})
print(df.dtypes)# 输出数据类型
print('-'*50)
print(df)

运行结果:

 

例5:header_names

使用names参数指定头部的名称。

df=pd.read_csv("temp.csv", names=['a', 'b', 'c','d'])
print(df)
print('-'*50)
df=pd.read_csv("temp.csv",names=['a','b','c','d'],header=0)
print(df)

运行结果:

例6:跳过行数

skiprows跳过指定的行数。

df=pd.read_csv("temp.csv", skiprows=2)
print(df)

运行结果:

 二、Python Pandas 稀疏数据

Pandas提供了对稀疏数据的原生支持,尤其是通过稀疏Series稀疏DataFrame。在Pandas中,稀疏数据主要通过SparseDtype() 来实现。稀疏对象的存在是为了提高内存效率

 2.1 SparseDtype() 

SparseDtype()参数: 

1. dtype

  • 作用:指定数据的类型。例如,"float64", "int32", "bool" 等等。
  • 默认值:没有默认值,必须提供一个数据类型。
  • 示例pd.SparseDtype("float64") 表示该稀疏数据为 float64 类型。

2. fill_value

  • 作用:指定用于表示缺失值的填充值。通常用 np.nan 或其他占位符(如 0)表示稀疏值。
  • 默认值np.nan
  • 示例pd.SparseDtype("float64", np.nan) 表示稀疏数据为 float64 类型,缺失值使用 np.nan 填充。 

例1:SparseDtype() 

import pandas as pd
import numpy as np

# 创建一个包含随机数的Series
ts = pd.Series(np.random.randn(10))

# 将一些值设置为NaN
ts[2:-2] = np.nan

# 将Series转换为稀疏格式
sts = ts.astype(pd.SparseDtype("float64", np.nan))
# 打印稀疏Series
print(sts)

运行结果:

 2.2 density和dense

例2:sparse.density

import pandas as pd
import numpy as np

# 创建一个包含随机数的DataFrame
df = pd.DataFrame(np.random.randn(10000, 4))

# 将前9999行的所有值设置为NaN,构成稀疏数据
df.iloc[:9999] = np.nan

# 转换为稀疏DataFrame
sdf = df.astype(pd.SparseDtype("float64", np.nan))

# 打印稀疏DataFrame的密度
print(sdf.sparse.density)

注意:density是 SparseSeries 中的一个属性,而不是 DataFrame 中的,所以.sparse.density不能缺 

例3 :转换回密集型 

import pandas as pd
import numpy as np
ts = pd.Series(np.random.randn(10))
ts[2:-2] = np.nan
sts = ts.astype(pd.SparseDtype())
print(sts.sparse.to_dense())

运行结果:

2.3 稀疏数据类型

稀疏数据应与其稠密表示具有相同的数据类型。目前支持 float64, int64 和 booldtypes 。根据原始数据类型, fill_value 的默认值会发生变化 −

  • float64 − np.nan
  • int64 − 0

  • bool − False

例4:

import pandas as pd
import numpy as np

s = pd.Series([1, np.nan, np.nan])
print(s)
print('-'*50)
s_sparse = s.astype(pd.SparseDtype())
print(s_sparse)

运行结果:

相关文章:

  • 算法题(69):搜索插入位置
  • BY组态:构建灵活、可扩展的自动化系统
  • 深入HBase——Bigtable
  • kamailio中Core Cookbook 核心配置手册
  • MVC模式和MVVM模式
  • Linux网络 | 多路转接epoll
  • 动手实现一个PDF阅读器
  • 深度解析前端性能优化:策略与实践
  • 2025年-数据库排名
  • 《红色警戒:兵临城下》 游戏软件安装步骤与百度网盘链接
  • 无题 -- 想做什么
  • unity学习44:学习Animator 的一个动作捕捉网站,实测好用
  • Java + Vosk 开启麦克风离线语音识别新纪元!
  • XXL-Job入门
  • vue+elementplus创建初始化安装
  • 【pytorch】weight_norm和spectral_norm
  • CentOS 7操作系统部署KVM软件和创建虚拟机
  • matlab-simulink难点记录1
  • Windows环境安装部署minimind步骤
  • Level DB --- two_level_iterator
  • 国际观察|韩国在政局多重不确定性中迎接总统选举
  • 5月1日,全社会跨区域人员流动量完成33271.4万人次
  • 思政课也精彩,“少年修齐讲堂”开讲《我的中国“芯”》
  • 李在明回应韩国大法院判决:与自己所想截然不同,将顺从民意
  • 马上评|扩大高速免费救援范围,打消出行后顾之忧
  • 特朗普加征关税冲击波:美国零售、汽车、航空、科技企业纷纷预警业绩波动