【Python数据处理专题】-加载IO

Python数据处理——pandas 文章目录0. 基本概念Series(一)创建Series(二)Series的简单操作DataFrame(一)创建DataFrame1. 数据选取2. 加载数据3. 排序与合并4. 数据汇总5. 时间序列 0. 基本概念 Pandas的数据类型是一张表,可以把Pandas理解为内存型的数据库。 import pandas as pd Series:列 DataFrame:表 Series (一)创建Series 1. 使用列表list创建Series (1)默认列表索引从0 - n-1 # 使用列表List 阅读详情

其他

!type f:\test\News\DataAnalyst.csv # 查看文件内容、格式
!type f:\test\demo.json
!dir # 查看目录下,文件名称
list(open('demo.csv')) # 打开查看文件

pd.read_table()

pd.read_table('文件路径/demo.txt',
              sep='\s+', # 指明分隔符为 多个空行
              delimiter=None,
              header='infer',#读取哪一行为columns
              names=None,#字段名
              index_col=0,  # 读取某列为index
              parse_dates=False,#哪个字段读取为时间类型
              date_parser=None,#日期解析器,即format
  

pd.read_csv()

查看文件布局

list(open('demo.csv'))

读取

pd.read_csv('f:/test/demo.csv',
            index_col=0, # 读取某列为index
            index_col=['col1','col2'], # 读取多重索引
            encoding='gbk', # 编码格式
            header=None, # 用作列名的行
            names=列表, # 自定义列名
            dtype={'col1':int,'col2':np.float64}, # 设置列的数据类型
            usecols=[1,2,3], # 只读取某几列['col1,'col2']
            skiprows=[0,2], #跳过 1、3行,skiprows=3:跳过前3行
            
            skipfooter=2, # 跳过最后2行,
            engine='python', # 指明skip_footer实现的方式
            
            nrows=5, # 只读5行数据(不包含标题)
            
            na_values=['NULL',999,'np.nan'], # 指定这些值读取为缺失值
            na_values={'col1':['NULL','demo'],'col3':['a','c']}, # 字典指定列中特定值为缺失值 
            
            parse_dates=False, # 尝试解析为日期
            #【True】:解析所有列
            #【列表或元组】
            
            delimiter=',', # 用于分隔字段的单字符字符串,默认为','
            skipinitialspace=False, # 忽略分隔符后面的空白符
            
            
           )

参数

参数说明
parse_dates解析为日期,默认False。
True:尝试解析所有列
一组列名、列号:解析指定列
列表的元素为列表或元组:将多格列组合到一起再进行日期解析
converters{‘col1’:f}:对col1列的所有值应用函数f
dayfirst解析有歧义日期时,看做国际格式,默认False
23/6/2018→June,23,2018
engine='python'解析方式
分析引擎
C或python
C引擎快
python引擎:更能完备

逐块读取

chunker = pd.read_csv('demo.csv',chunksize=1000)

tot = pd.Series([])
for piece in tot:
    tot = tot.add(piece['key'].value_counts(),fill_value=0)

tot = tot.sort_values(ascending=False)

输出文件

df.to_csv('f:/test/demo.csv',
          index_label='demo', # 设置保存时index的name
          index = False, # 不保存索引
          header = False, # 不保存列名
          na_rep = 'NULL', # 指定缺失值,用NULL标记
          columns = ['col5','col3','col1'], # 只保存部分列,保存列的顺序与指定列表一致
         )

指定分隔符输出

df.to_csv('demo',
          sep = '|', # 指定分隔符
         )

手工处理

手工读取

with open('demo.csv') as f:

手工输出分隔符文件

with open('demo.csv','w') as f:
    writer = csv.writer(f, dialect = my_dialect)
    writer.writerow(('one','two','three'))
    writer.writerow(('1','2','3'))
    writer.writerow(('4','5','6'))
    writer.writerow(('7','8','9'))

pd.read_excel()

读取表

pd.read_excel('f:/test/News/demo.xlsx',
              sheetname='表名', # 读取哪张表
              
             )

写入表

df.to_excel('f:/test/demo.xlsx',
            sheet_name='demo1', # 设置保存的表名
            index=False, # 不保存index         
           )
writer = pd.ExcelWriter('demo.xlsx') # 创建一个demo.xlsx文件

df1.to_excel(writer,'Sheet1') # df文件写入demo.xlsx表,命名为表1

writer.save()

写入多张表

  • 推荐:
with pd.ExcelWriter('f:/test/demo.xlsx') as writer:
    df1.to_excel(writer,sheet_name='demo1')
    df2.to_excel(writer,sheet_name='demo2')

pd.read_json()

  • JSON(JavaScript Object Notation)

  • json字符串

    obj = """
    {"name": "Wes",
     "places_lived": ["United States", "Spain", "Germany"],
     "pet": null,
     "siblings": [{"name": "Scott", "age": 30, "pets": ["Zeus", "Zuko"]},
                  {"name": "Katie", "age": 38,
                   "pets": ["Sixes", "Stache", "Cisco"]}]
    }
    """
    

JSON字符串转换成Python形式

import json

result = json.loads(obj) # obj为json字符串

Python对象(不一定是DataFrame、Series)转换成JSON格式

asjson = json.dumps(result)

JSON格式转换成DataFrame

  • 向DataFrame构造器传入一个字典的列表(就是原先的JSON对象),并选取数据字段的子集
df = pd.DataFrame(result['siblings'], # siblings JSON对象
                  columns=['name','age']) # ['name','age]选取字段的子集

特定格式的JSON数据集

  • 转换成Series或DataFrame
pd.read_json('demo.json') # JSON数组中的每个对象是表格中的一行

pands输出json

df.to_json()

sqlite

  • 写入数据库
  • sqlitebrowser.org查看数据库
import sqlite3
connection = sqlite3.connect('f:/test/demo.sqlite')
df.to_sql('demo_DATA', #自己命名数据库名,会写入demo.sqlite
          connection,
          if_existe='replace'
          # 如果数据库存在,则替换(if_exists='append,存在则添加在后)
          )
connection.commit()
connection.close()
  • 读取数据库
connection = sqlite3.connect('f:/test/demo.sqlite')
dfs = pd.io.sql.read_sql('select * from demo_DATA',
                         connection, #读取这个数据库
                         index_col='index'
                        )
connection.close()
dfs.head()

read_sql

import sqlalchemy as sqla

db = sqla.create_engine('sqlite:///mydata.sqlite') # 用SQLAlchemy连接SQLite数据库

pd.read_sql('select * from table1',db)

pandas解析hdf5

  • HDF5是一种存储大规模科学数组数据的非常好的文件格式
    • 可以被作为C库,带有许多语言的接口,如Java、Python和MATLAB等。
    • HDF5中的HDF指的是层次型数据格式(hierarchical data format)。
    • 每个HDF5文件都含有一个文件系统式的节点结构,它使你能够存储多个数据集并支持元数据。
    • 与其他简单格式相比,HDF5支持多种压缩器的即时压缩,还能更高效地存储重复模式数据。
    • 对于那些非常大的无法直接放入内存的数据集,HDF5就是不错的选择,因为它可以高效地分块读写。
  • 保存为hdf5
df = pd.DataFrame({'a':np.random.randn(10,3)},
 		         index=pd.date_range('20181111',periods=10),
                  columns=['a','c','b'])
hdf =  pd.HDFStore('f:/test/demo.h5')
hdf['obj1'] = df
hdf['obj1_col'] = df['a']
  • 读取
read_hdf = pd.HDFStore('f:/test/demo.h5')
df = read_hdf['df']
df
pd.HDFStore('f:/test/hdf.h5')['df']

HDFStore存储模式

  • table存储模式

    • 通常会更慢
    • 支持使用特殊语法进行查询操作
    hdf.put('obj2',df,format)
    hdf.select('obj2',where = ['index == 20181111'])
    
  • df.to_hdf('demo.h5','obj3',format = 'table')
    pd.read_hdf('demo.h5','obj3',where = ['index = 20181111'])
    

web

读取远程文件

url = 'http://archive.ics.uci.edu/m1/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data'
names = ['preg','plas','pres','skin','test','mass','pedi','age','class']
data = pd.read_csv(url, names = names)
data.head()

pandas读取HTML

url = 'http://www.worldcup.2014.163.com/index.html'
df = pd.read_html(url)
len(df)
df[0].head()


table = []
for i in range(1,7):
    table.append(pd.read_html('https://nba.hupu.com/stats/players/pts/%d' %i)[0])

players = pd.concat(table)
columns=['排名','球员','球队','得分','命中-出手','命中率','命中-三分','三分命中率','命中-罚球','罚球命中率','场次','上场时间']
players.columns=columns

pandas_datareader财经数据

  • 搜索pandas_datareader,查看官网
import pandas_datareader.data as web
import datetime
start = datetime.datetime(2018,11,1)
end = datetime.datetime(2018,11,11)
apple = web.DataReader('AAPL','yahoo',start,end)
apple.head()

解析XML

  • XML(Extensible Markup Language)
    • 一种常见的支持分层、嵌套数据以及元数据的结构化数据格式。


Web APIs交互

读取GitHub的pandas主题api

import requests
url = 'https://api.github.com/repos/pandas-dev/pandas/issues'
resp = requests.get(url) # 会返回一个包含被解析过的JSON字典

data = resp.json() # data中的每个元素都是一个包含所有GitHub主题页数据(不包含评论)的字典。

返回DataFrame对象

issues = pd.DataFrame(data,columns=['number','title','labels','state'])


股票数据

tushare.org

import tushare  as ts
print(tushare.__version__) # 查看包的版本
ts.get_h_data('002241',start='2018-11-01',end='2018-11-11')
  • 读取 新股
ts.new_stocks()

Pandas链接mysql

  • 先链接,读取
import pandas as pd
from sqlalchemy import create_engine
def reader(query,db = 'learn'):
    sql = query
    engine = create_engine('mysql+pymysql://root:admin888@127.0.0.1:3306/{0}?charset=utf8'.format(db))
    df = pd.read_sql(sql,engine,)
    return df
df_company = reader('select * from company_sql')
reader('show tables')

写入mysql

​```python
df.to_sql('new_table_name',con=engine,index=True)
​```

- 优点
  - 新表不用创建字段

pymysql链接MySQL数据库

  • 安装pymysql

打开cmd,pip install pymysql

  1. 链接MySQL
import pymysql
# 加载pymysql
  1. 创建链接conn
conn = pymysql.connect(
	host = '127.0.0.1',
    user = 'root',
    password = 'admin888',
    db = 'learn',
    port = 3306,
    charset = 'utf8'
)
# 定义变量链接conn
# 链接数据库
  1. 创建游标
cur = conn.cursor()
# 创建游标
  1. 获得结果
cur.execute(“select * from company_sql”)
# sql语句,获得结果,此时结果还放在内存中
  1. 调出赋值
data = cur.fetchall()
# 调取结果赋值给变量data
  1. 循环
for d in data:
	print (d[0],d[1],d[2])
# for循环,切片
conn.commit()
# 提交修改,一般只是读取的话,用不到该语句
cur.close()# 关闭游标
conn.close()# 关闭链接

  • conda install pandas_datareader

  • import pandas_datareader as pdr

  • 获取雅虎股票信息

    start=datetime.datetime(2015,9,20)
    alibaba = pdr.get_data_yahoo('BABA',start = start)
    amazon = pdr.get_data_yahoo('AMZN',start = start)
    
    • 股价查询编号

      'AAPL' # 苹果
      'GOOG' # 谷歌
      'MSFT' # 微软
      'AMZN' # 亚马逊
      'FB' # 脸书
      'BABA' # 阿里巴巴
      'VIPS' # 唯品会
      

API

  • 豆瓣API

    • 返回值为json格式
    • https://api.douban.com/v2/book/1220562,获取ID为1220562的书的信息
    • https://api.douban.com/v2/movie/subject/26387639获取ID为26387639(摔跤吧爸爸)电影的信息
  • 爬取

    import urllib.request as urlrequest
    import json
    
    # 抓取api的json文件
    id_list = []
    for id in id_list:
        url_visit = 'https://api.douba.com/v2/movie/subject/{}'.format(id)
        crawl_content = urlrequest.urlopen(url_visit).read()
        # 加载爬取的文件
        json_content = json.loads(crawl_content.decode('utf8'))
        rank = json_content['rating']['average']
        # 将爬取的内容写入文件
        with open('movie_score.txt','a')as output:
            output.write('{},{}\n'.format(id,rank))
    

By儒冠多误身 2019/04/21

轻量级Python数据处理工具getdata的设计与实现 数据处理是Python开发中的常见需求,传统方案如Pandas虽然功能强大但存在启动慢、依赖多等问题。本文介绍一种基于Python标准库的轻量级数据处理工具getdata,它采用纯Python实现确保零依赖,通过精简DataFrame核心和高效IO处理满足日常80%的数据操作需求。该工具特别适合日志分析、报表生成等场景,具有内存占用少、启动快速的特点。文章详细解析了延迟加载、选择性导入等性能优化技术,为开发者提供了一种替代臃肿数据处理框架的轻量化解决方案。 阅读详情

相关推荐

Python 的 io.BytesIO():内存中的二进制数据处理

在 Python 编程中,处理二进制数据是一项常见任务。然而,有时您可能不想将数据写入实际文件,而是想在内存中进行操作。这就是 io.BytesIO() 登场的地方。本文将介绍 io.BytesIO() 类的基本用法,以及如何在内存中创建临时的二进制数据缓冲区,以便更高效地处理数据。无需担心创建临时文件,让我们深入了解这个强大的 Python 工具。

专注于深入研究多种编程语言,以实战为导向,逐步拓展开发技能,提升工程化编码和思维能力,展现无敌技术实力。 2053

用pandas连接sqlite3读取数据库当中的数据的命令

weixin_44274975的博客 2494

GRACE数据处理实战:Python一键加载球谐系数与EWH转换

GRACE重力卫星数据是研究陆地水储量、冰川消融和地下水变化的核心遥感源,其本质为时间序列球谐系数(Spherical Harmonic Coefficients),需经归一化还原、去相关滤波、球谐合成与物理单位换算四步才能生成等效水高(EWH)。传统处理依赖Fortran工具链,门槛高、易出错;而现代Python生态通过pyshtools、xarray等库可实现端到端流程自动化。本文聚焦GRACE Level-2 RL06数据的工程化读取与预处理,详解CMB改正、Pinc滤波、DH格网合成等关键环节,特别

weixin_29056701的博客 255

Unity加载图片

Unity两种方式加载图片 https://www.cnblogs.com/guoguoguo/p/7350547.html

WenHui君_的博客 797

Mission Planner连接Autopilot保姆级教程:从USB到无线全搞定

本文提供Mission Planner连接Autopilot的全面指南,涵盖USB直连、无线数传、蓝牙适配等多种连接方案。详细讲解驱动安装、波特率匹配、性能优化等关键步骤,并分享多链路冗余配置与故障转移的高阶技巧,助你快速解决连接问题。

weixin_28455801的博客 381

vmware虚机Debian10磁盘空间无损扩容

该方法不适和LVM的磁盘管理 备份 一定要先做备份,虚机中直接创建一个快照备份 vm上增加空间 初始给的40G空间不够需要扩容,vm那给系统添加到100G 重新分区 查看当前分区情况 sudo fdisk -l

lms99251的博客 7458

【ValueError: Duplicated level name: "Date", assigned to level 1, is already used for level 0.】临时解决方法

个人认为这是由于两级的索引名称重名导致的,传入groupby时重命名各级所以很难即可解决 具体操作如下 groupby([baba.index.year.rename('year'),baba.index.month.rename('month')])['rise'].count() 此时我的jupyter 报错提示 ValueError: Duplicated level name...

儒冠多误身的博客 1194

MDB协议中设备级别和选项(Levels and Options)

MDB协议的LEVEL级别介绍

hbstart的博客 939

【儒冠多误身】MySQL个人学习笔记

文章目录MySQL个人学习笔记问题总结1. 报错2. 设置字符集3. 跳出执行入门语句增删改查创建表查看表结构增 insert改 update set where删 delete from where查 select查询模型建表数值型整型int系列的参数:(M) unsigned zerofill浮点型:float(M,D),会有损精度定点数:decimal(M,D)字符串型Char(M)定长字...

儒冠多误身的博客 568

Saturn PCB Toolkit V8.02 实战:5分钟完成10A电源路径的走线与过孔通流验证

本文详细介绍了如何使用Saturn PCB Toolkit V8.02快速验证10A电源路径的走线与过孔通流能力。通过实战案例和参数配置指南,帮助工程师解决大电流PCB设计中的温升失控、过孔瓶颈等核心挑战,提升设计效率和可靠性。

weixin_34194829的博客 453

MySQL语句-查看当前数据库有哪些表(SHOW TABLES)

不区分大小写 大写 SHOW TABLES 小写 show tables

weixin_44257023的博客 5546

微调大模型如何准备数据集——常用数据集,Alpaca和ShareGPT

在大模型微调中,我们一般使用Alpaca 和 ShareGPT和两种格式的数据集。

Science prince的博客 1097

Open3D 点云数据处理基础(Python版)

Open3D是一个开源库,支持快速开发处理3D数据的软件。Open3D后端是用C++实现的,经过高度优化并通过Python的前端接口公开。Open3D提供了三种数据结构:点云(point cloud)、网格(mesh)和RGB-D图像。对于每个表示,open3D都实现了一整套基本处理算法,如I/O、采样、可视化和数据转换。此外,还包括一些常用的算法,如法线估计、ICP配准等。模块功能Geometry 几何模块数据结构和基本处理算法Camera 相机模块相机模型和相机轨迹。

feichangyanse的博客 1万+

第9章:Embedding、Pooling 与检索增强基础

本文介绍了律师事务所如何利用vLLM构建法律文档RAG系统,解决传统关键词检索在语义匹配上的不足。主要内容包括: 项目背景:传统Elasticsearch检索在法律术语上的低准确率问题,及多模型维护的复杂性; 技术方案:采用vLLM统一支持生成和向量化能力,通过语义向量检索提升相关性; 关键实现: 用vLLM的Embedding端点处理文档向量化 构建包含离线索引和在线检索的完整RAG流程 采用余弦相似度进行语义匹配 实践建议:切片大小选择、向量归一化处理、不同场景下的数据库选型等。

davidwang456的专栏 60

华为OD机试真题2025双机位C卷 Python&JS 实现【卡牌游戏】

小明正在尝试一种新的牌游戏。游戏规则只如下:首先,小明拿到一张写有数字m的牌。 然后,他会拿到另外n张牌,上面分别写有不同的数字,牌排成一排。小明的目标是从这排牌中找到一串连续的牌,这些牌上数字的总和可以被 m整除。你的任务是判断小明是否可以完成这个目标。

MISAYAONE的博客 404

Nucleus:基因组数据处理的终极Python/C++工具库入门指南

Nucleus是一个功能强大的基因组数据处理工具库,提供Python和C++接口,专注于高效读写和处理各类基因组数据格式。无论是处理VCF变异文件、BAM alignment数据还是FASTA参考序列,Nucleus都能提供简洁易用的API,帮助研究人员快速构建生物信息学分析流程。 ## 🧬 为什么选择Nucleus? 在基因组学研究中,处理各种复杂的数据格式往往是分析工作的第一道门槛。Nu

gitblog_00198的博客 962

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

python内置模块io模块,处理各种类型的IO操作流

Python中的io模块是用来处理各种类型的I/0操作流。主要有三种类型的IO类型:text I/O , binary I/O 和 raw I/O。它们都是通用类别,每一种都有不同的后备存储。属于这些类别中的任何一个的具体对象称为文件对象,其他常用的术语为流或者类文件对象除了它的类别,每一种具体的流对象也具有各种功能:它仅仅允许读,或者仅仅允许写,或者既能读又能写。它也允许任意随机访问(向前或者向后寻找任何位置),或者仅仅顺序访问(例如在套接字或管道中)。

老衲爱洗头的博客 2869

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【免费下载】 探秘NMC_MET_IO:一款强大的气象数据处理工具

探秘NMC_MET_IO:一款强大的气象数据处理工具 项目简介 是一个开源的Python库,专为处理、分析和可视化气象数据而设计。该项目由nmcdev团队开发,旨在简化气象学家和其他相关领域专业人士对气象数据的操作流程,提供高效的工具来探索和理解气象现象。 技术分析 NMC_MET_IO基于Python编程语言,充分利用了其在科学计算和数据分析领域的强大功能。关键特性包括: 数据读取与解析:它...

gitblog_00046的博客 999

Pandas IO工具——《Python数据分析库Pandas》

Pandas IO工具以其强大的功能和灵活的扩展性,在数据处理和分析领域发挥着重要作用。通过不断优化和改进,Pandas IO工具将能够更好地应对各种挑战和需求,推动数据科学的发展。同时,随着社区的支持和用户的参与,Pandas IO工具将继续保持其领先地位,成为数据处理和分析领域的首选工具之一。无论是在学术研究、商业分析还是机器学习领域,Pandas IO工具都能够帮助用户高效地读取和写入数据,实现数据的有效管理和利用。

Python老吕的博客 1393

【独家披露】大厂多模态项目背后的Python数据处理框架设计思路

揭秘大厂级Python多模态数据处理框架设计,解决图像、文本、音频融合难题。涵盖数据对齐、异构信息整合与高效Pipeline构建,提升模型训练效率。基于PyTorch与Hugging Face生态实现,灵活性强、易于扩展,值得收藏。

DebugLoom的博客 605

python数据处理之异常值删除(3的塔准则)

python数据处理之异常值删除(3的塔准则) # 导入库 import numpy as np import pandas as pd from matplotlib import pyplot from pandas.core.frame import DataFrame import os from pandas.plotting import scatter_matrix import random from pylab import * mpl.rcParams['font.sans-s...

qq_42210908的博客 6434

python数据处理

参考链接: https://www.yisu.com/zixun/225360.htmldef foo() : #定义函数foo(), m = 3 #定义变量m=3;def bar() : #在foo内定义函数bar() n = 4 #定义局部变量n=4 print(m + n) #m相当于函数bar()的全局变量 return(bar()) #foo()函数内调用函数bar() foo()

小琳子要开心呀 2572

【Polars大数据处理Python】:掌握高效数据处理的5大核心技巧

掌握Polars大数据处理Python的5大核心技巧,提升数据处理效率。适用于大规模数据清洗、分析与转换场景,支持惰性计算、并行处理,性能远超Pandas。深入讲解API优化、内存管理与查询执行策略,助力高效开发。值得收藏,点击了解实战方法。

LiteProceed的博客 1146

Python数据处理新选择:petl库完全指南——高效Extract、Transform、Load表格数据

petl(Python Extract Transform and Load)是一个轻量级但功能强大的Python库,专为表格数据处理设计。它提供了简洁的API,帮助开发者轻松完成数据抽取(Extract)、转换(Transform)和加载(Load)的全流程工作,特别适合处理结构化数据和进行ETL任务。无论是处理CSV、Excel文件,还是与数据库交互,petl都能提供高效且直观的解决方案。

gitblog_00164的博客 726

课程二:Python文件与数据处理——从零开始的IO编程

掌握 Python 文件读写、目录操作和序列化基础,能独立完成简单的数据处理任务(如日志记录、配置文件管理)。

yakoo5的专栏 1111
上一篇: 实例二:上海房屋2017年成交信息分析
下一篇: 【Python数据处理专题】-时间序列
儒冠多误身
博客等级 码龄8年 12粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值