Python 数据读取与写入

一. 读写分隔符文件csv,txt

顶层函数,参数众多,不能一一列举,参考文档字符串。

常用参数
path:文件路径
header: 用作列名的行号,默认是0(第一行),当数据不包括列名时使用header=None,读入时使用默认的整数索引,与names搭配使用可以在读入时指定新列名。
names=[列名列表]
skiprows:跳过第几行
encoding:文本编码,如‘utf-8’
converters=字典{列名:函数名}:读入时将函数应用到此列
thousands:千位分隔符

读入分隔符文件

  1. pd.read_csv(path=‘路径.csv’,…)
  • 如果文件内含有中文字符,则需要用open()打开文件成为io对象,才能正常读取中文,因为open()支持打开中文文件,默认只读。
  • 这里路径正常写即可,没有转义,加转义\ /或r也没错。
df = pd.read_csv('E:\Bing\dataAnalyse_dataMining\R_Projects\FactorAnalysis\LA.Neighborhoods.csv')
df = pd.read_csv(open('E:\Bing\dataAnalyse_dataMining\R_Projects\PCA\世界前100名男性网球运动员信息.csv'))

在含有转义符的字符串前加‘r’表示原生字符串row:字符串内按原始含义解释,不做转义处理;这里的r相当于正则表达的操作.

  1. pd.read_table(path=,sep= ,…)
    要求同上,只是多了个表示分隔符的参数sep,可以为正则表达式,比如不同数量的空格为sep=’\s+’
df = pd.read_table(open('E:\Bing\dataAnalyse_dataMining\R_Projects\PCA\世界前100名男性网球运动员信息.csv'),sep=',')
df = pd.read_csv('E:\Bing\dataAnalyse_dataMining\R_Projects\FactorAnalysis\LA.Neighborhoods.csv')
  • 缺失值处理
    NA与NULL均被表示为NaN。
    1.判断是否有缺失值:pd.isnull(df) ,返回同样大小的TF结构。
    2.将某特定值读入时指定为缺失值,例如空串或异常值:参数na_values=字典
## 为不同的列指定用来变成NA的值
dic = {'Age':26,'LA.Nbhd':['','unkown']}  # 将年龄列中值为26的值读入时变成NA
df = pd.read_csv('E:\Bing\dataAnalyse_dataMining\R_Projects\FactorAnalysis\LA.Neighborhoods.csv',na_values=dic)

写入csv

pd.to_csv(path)

可选参数:
sep= : 使用其他分隔符
na_rep=: 缺失值输出为什么形式,如na_rep=‘NULL’
columns=: 写入哪些列,按照你选择的顺序写入这些列
index=True,header=True:默认包含行列标签

df.to_csv("E:\\data2.csv",encoding='utf_8_sig') # 注意中文乱码问题

# 写入到txt,和csv的唯一区别是以\t为分隔符
df.to_csv('路径',sep='\t')

二. 读写Excel

1.导入附加包
import xlrd :读取xls文件
import openpyxl :读取xlsx文件
2.读取
pd.read_excel(path,‘Sheet1’)
3.写入
df.to_excel(path)

df.to_excel("路径",sep='\t',index=False,header=False)

三. 与数据库交互

1.Sql Server

套路都一样,重点是SQL语句,增删改查

  • 套路:导入pymssql \rightarrow 建立与数据库的连接 \rightarrow 建立游标 \rightarrow 通过游标执行SQL语句 \rightarrow 查询则通过游标fetchall数据,插入则通过连接commit数据,改查均有对应的SQL语句 \rightarrow 关闭游标和连接
  • 查询数据库获取数据:
import pymssql  # (mssql:microsoft sql,即Sql Server)
def select(sql):
    try:
        conn = pymssql.connect(host='localhost', server='.', database='Infection', port='1433')  # 建立连接,主机名,服务器名,数据库名,端口号是sqlserver默认的1433
        cur = conn.cursor()    # 建立游标
        cur.execute(sql)       # 执行sql语句
        data = cur.fetchall()  # 从游标中获得数据,不包含列名,是元组的列表
        col = [x[0] for x in cur.description]  # 从游标的description属性中获得列名
    except Exception as err:
        print(err)    # 只打印最终的报错信息
        # raise err  还打印跟踪堆栈信息
    else:
        return pd.DataFrame(data,columns=col)   # try成功后返回整理好的数据框
    finally:
        cur.close()   # 关闭游标
        conn.close()  # 关闭连接
# 查询字符串,可以用变量进行字符串连接
sqlstr = "select * from ncov where region='中国' order by updateTime" 
data = select(sqlstr)  # 执行函数
  • 增加数据,嵌套列表逐条插入到SQLserver
def InsertData(l):
    try:
        conn = pymssql.connect(host='localhost',server='.', database= 'Infection',port='1433')  #建立连接
        cur = conn.cursor()  # 建立游标
        for x in l:  # 对列表中的每个元素
            sql = "insert into 表名 values('%s','%s',%d);" % (x[0],x[1],x[2]) # 格式化字符串
            cur.execute(sql)  # 执行插入语句
            conn.commit()  # 最后一起提交兴许可以,没有实验
    except Exception as err:
        print(err)
    finally:
        cur.close()
        conn.close()

注:Python3.8将弃用pymssql

2.MySql

import pymysql
  • 简单的查询:关键:cur.execute(sqlstr) 执行sql语句
def select(sqlstr):
    try:  
        db = pymysql.connect(host="localhost",user="root", password="123456",db="wktj2",port=3306)   # 打开数据库连接,主机名,用户名,密码,数据库名,默认端口3306  
        cur = db.cursor(cursor=pymysql.cursors.DictCursor)   # 获取操作游标 ,里面的参数可以让数据包含列名,等价于在构建数据框时指定columns=[x[0] for x in cur.description]
        cur.execute(sqlstr)    # 执行sql语句
    except Exception as err:  
        raise err    # 打印异常信息
    else:
        return pd.DataFrame(cur.fetchall())    # 获取查询结果,并整理为数据框形式  
    finally:  
        cur.close()  # 关闭游标
        db.close()  #关闭连接 
sqlstr = "SELECT temp AS outTemp,updatetime AS time FROM 气象Web WHERE date >= '2019-12-29' ORDER BY updatetime;"
data = select(sqlstr)
  • 执行存储过程,关键:cur.callproc(name, args=arg) 调用存储过程
def select(name,arg):  # 存储函数名,存储函数需要的参数组成的元组
    try:  
        db = pymysql.connect(host="localhost",user="root", password="123456",db="wktj2",port=3306)   #打开数据库连接  
        cur = db.cursor(cursor=pymysql.cursors.DictCursor)  
        cur.callproc(name, args=arg)  # 调用存储过程,获得四张表的总数据
    except Exception as err:  
        raise err    
    else:
        return pd.DataFrame(cur.fetchall())  # 因为此处存储函数是执行查询,所以要返回获得的集合,
    finally:  
        cur.close()
        db.close() 
data = select('Four_Tables',('2019-12-29','a02'))  # 执行函数
  • 将嵌套列表逐条插入数据库,同SQLserver
def InsertData(l):
    try:
        con = pymysql.connect(host='localhost',user='root',password='123456',port=3306,db='infection') # 建立数据库连接
        cur = con.cursor()  # 建立游标
        for x in l:
            sql = "insert into ncov values('%s','%s',%d);" % (x[0],x[1],x[2])
            cur.execute(sql)
            con.commit()
    except Exception as err:
        raise err
    finally:
        cur.close()
        con.close()

四. JSON数据

JSON(JavaScript Object Notation):Web浏览器和其他应用之间通过HTTP请求发送数据的标准格式。
使用内置的json库:import json
result = json.loads(obj):将JSON字符串转换为Python形式。
json.dumps(result):将Python对象转换为JSON
df.to_json():从pandas中将df导出为JSON
参数详见doc_string

五. 与Web API交互

  1. API(应用程序编程接口):是一些预先定义的接口,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。说的更加通俗一点,别人写好的代码,或者编译好的程序,提供给你使用, 就叫做API,一套别人封装的属性和方法。你使用了别人代码(或者程序)中的某个函数、类、对象,就叫做使用了某个API。
  2. Web API:专门操作网页的方法和属性,基于 Http 协议,请求和返 回格式结果默认是 json 格式。
  3. 从网站的公开API获取数据:
    import requests : 导入包
    resp = requests.get(url) :发送一个HTTP GET请求,得到Response对象
    data = resp.json() :返回解析为本地Python对象的JSON的字典

六. 常用方法

1.Python join() 方法

用于将序列中的元素以指定的字符连接生成一个新的字符串。
语法:str.join(sequence)
sequence – 要连接的元素序列。

2.将一个列表追加插入到dataframe的一行:

df.loc[len(df)] = [1,2] # 将列表追加入到dataframe一行,必须按行索引赋值,len()正好是行下标

3.list转为DataFrame的一列:

df = pd.DataFrame(ls, columns=[‘colname’])

4.两个dataframe按行纵向拼接:

df1=df1.append(df2),注意返回新值,原对象不变,所以要重新赋值

发布了24 篇原创文章 · 获赞 6 · 访问量 1177

猜你喜欢

转载自blog.csdn.net/wbing96/article/details/102906368