Pandas操作数据库及保存csv
数据的保存
import pandas as pd
import numpy as np
from pandas import Series
col_db = [['one',1,2,3,4,np.nan],['two',5,6,8,'world',np.nan],['three',9,10,11,12,'foo']]
data = pd.DataFrame(col_db,columns = ['somthing','a','b','c','d','message'])
data
somthing a b c d message
0 one 1 2 3 4 NaN
1 two 5 6 8 world NaN
2 three 9 10 11 12 foo
# 利用DataFrame的to_csv方法,csv默认为逗号分隔
data.to_csv('save.csv')
# 指定分隔符
data.to_csv('save_.csv',sep='|')
# 缺失值在输出结果中会被表示为空字符串,你可以指定
data.to_csv('save_1.csv',na_rep='NULL')
# 禁用行和列的标签,只保留数据
data.to_csv('save_2.csv',header=False,index=False)
# 输出指定的列,并以指定的顺序排列
data.to_csv('save_2.csv',index=False,columns=['a','b','c'])
# Series也有一个to_csv方法,from_csv可以直接读取csv
Series.from_csv('save_2.csv')
a b
1 2
5 6
9 10
dtype: object
手工处理分隔符格式
大部分的表格型数据都能用pd.read_table进行加载,但是由于含有畸形行的文件而使read_table出毛病的情况并不少见
例如如下的格式文件:
| a, | b, | c | d |
|---|---|---|---|
| 1, | 2, | 3 | |
| 1, | 2, | 3, | 4 |
import csv
# 直接使用pd.read_csv会报错,这里需要引入csv模块,进行处理
f = open('save_2.csv')
# 将已打开的文件型对象传给csv.reader
reader = csv.reader(f)
for line in reader:
print(line,type(line))
['a', 'b', 'c'] <class 'list'>
['1', '2', '3'] <class 'list'>
['5', '6', '8', '10'] <class 'list'>
# 整理这个reader
lines = list(csv.reader(open('save_2.csv')))
lines
[['a', 'b', 'c'], ['1', '2', '3'], ['5', '6', '8', '10']]
header, values = lines[0], lines[1:]
# 压缩为元组,再把值恢复矩阵
p = zip(header, zip(*values))
for i in p:
print(i)
('a', ('1', '5'))
('b', ('2', '6'))
('c', ('3', '8'))
# 字典推导式
{h:v for h,v in zip(header, zip(*values))}
{'a': ('1', '5'), 'b': ('2', '6'), 'c': ('3', '8')}
# 手工输出分隔符文件,可以使用csv.writer
# w模式会覆盖并重新生成
with open('save_2.csv','w') as f:
writer = csv.writer(f)
writer.writerow(('new_1','new_2'))
JSON数据
如何将JSON对象转为DataFrame或其他便于分析的数据结构
import json
obj = '''
{
"name":"wes",
"places_lived":["United Statues","Spain","Germany"],
"pet": null,
"siblings":[{"name":"Scott","age":25,"pet":"Zuko"},
{"name":"Katie","age":33,"pet":"Cisco"}]
}
'''
# 选取一部分符合dataFrame格式的
result = json.loads(obj)
pd.DataFrame(result['siblings'])
age name pet
0 25 Scott Zuko
1 33 Katie Cisco
使用数据库
# 导入内置的SQLite数据库
import sqlite3
query = '''
CREATE TABLE test
(
a VARCHAR(20),
b VARCHAR(20),
c REAL,
d INT
);
'''
# 直接在内存中创建
con = sqlite3.connect(':memory:')
con.execute(query)
con.commit()
# 插入几行数据
data = [('Atlanta','Georgia',1.25,6),
('Tallahassee','Florida',2.6,3),
('Sacramento','California',1.7,5)
]
stmt = 'INSERT INTO test VALUES(?,?,?,?)'
con.executemany(stmt,data)
con.commit()
# 从表中选取数据
cursor = con.execute('select * from test')
rows = cursor.fetchall()
rows
[('Atlanta', 'Georgia', 1.25, 6),
('Tallahassee', 'Florida', 2.6, 3),
('Sacramento', 'California', 1.7, 5)]
#取出列表名
cursor.description
(('a', None, None, None, None, None, None),
('b', None, None, None, None, None, None),
('c', None, None, None, None, None, None),
('d', None, None, None, None, None, None))
# zip(*)返回矩阵,与zip作用相反
k = zip(*cursor.description)
# for i in k:
# print(i)
# 直接使用k[0]会报错,zip对象不支持'zip' object is not subscriptable,需要借助list包装
list(k)[0]
('a', 'b', 'c', 'd')
pd.DataFrame(rows,columns=list(zip(*cursor.description))[0])
a b c d
0 Atlanta Georgia 1.25 6
1 Tallahassee Florida 2.60 3
2 Sacramento California 1.70 5
pandas有一个可以简化上面过程的read_sql函数,只需要传入select语句链接对象即可
import pandas.io.sql as sql
sql.read_sql('select * from test',con)
a b c d
0 Atlanta Georgia 1.25 6
1 Tallahassee Florida 2.60 3
2 Sacramento California 1.70 5
# pandas链接mysql同理
import pymysql
conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='123456',db='taobao',charset='utf8')
sql.read_sql('select * from tblive2',conn)
存取MongoDB中的数据
import pymongo
# 创建链接对象
con2 = pymongo.MongoClient('localhost',port=27017)
# 链接数据库
db = con2.wechat_spider
# 使用posts集合(这是我电脑里的)
find_list = db.posts.find()
# 这里由于不能直接传入迭代对象,需要借助list
pd.DataFrame(list(find_list))
Pandas操作数据库及保存csv的更多相关文章
- Python之Pandas操作csv文件dataframe
# -*- coding: utf-8 -*- # author:baoshan import pandas as pd def main(): aqi_data = pd.read_csv('chi ...
- Python操作数据库实战
pymysql # -*- coding: utf-8 -*- """ @Datetime: 2018/12/26 @Author: Zhang Yafei " ...
- pandas操作,感觉不错,复制过来的
整理pandas操作 本文原创,转载请标识出处: http://www.cnblogs.com/xiaoxuebiye/p/7223774.html 导入数据: pd.read_csv(filenam ...
- 如何使用python records 库优雅的操作数据库
今天要介绍的这个python第三方库非常厉害,完美操作各种数据库.名字叫 records, 在网上很少有这个库的相关资料,但是在开源社区可是很火热的哦.如果这还不能打消你的顾虑,再告诉你一件事:如果你 ...
- MySQL学习02(操作数据库)
操作数据库 结构化查询语句分类 名称 解释 命令 DDL(数据库定义语言) 定义和管理数据对象,例如数据库和数据表 create.drop.alter DML(数据操作语言) 用于操作数据库对象中所包 ...
- pymysql 操作数据库
一.简介 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同,但目前pymysql支持python3.x而后者不支持3.x版本 其执行语句与sql源码相似 二.使用 ...
- django 操作数据库--orm(object relation mapping)---models
思想 django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM). PHP:activerecord Java:Hibernate C#:Ent ...
- jdbc操作数据库
JDBC全称为:Java DataBase Connectivity(java数据库连接). SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC. 学习JD ...
- Android 学习笔记之如何使用SQLite数据库来保存数据...
PS:最近一阵子都在为考试复习...坑爹的计算机网络,复习了3天,最后该不会的还是不会...明天还考英语...真蛋疼... 学习内容: 1.使用SQLite数据库来保存数据... SQLite: ...
随机推荐
- SAP HANA数据库架构部署方法
HANA作为内存数据库,在实现高性能访问的同时,必须也要有稳定的架构,今天我们就来看看企业部署SAP HANA时应该如何来设计数据库的架构. HANA数据库在安装时,有以下几种选择方法,为方便大家理解 ...
- service和pod通过标签绑定
service和pod绑定 apiVersion: v1 kind: Service metadata: name: my-haproxy labels: app: my-haproxy spec: ...
- aptana studio 使用技巧整理
aptana studio 使用技巧整理 https://192.168.1.16/web/punica/adaptana studio 使用技巧整理http://uedfans.cn/ 推荐一个网站 ...
- EasyExcel 解析excel
参考:https://blog.csdn.net/jiangjiandecsd/article/details/81115622 https://blog.csdn.net/jianggujin/ar ...
- java json字符串与对象转换
下载引入包gson-2.0.jar 1.字符转数据 final Map map = new HashMap();map.put("contents", "[{\&q ...
- javascript中的立即执行函数(function(){…})()
javascript中的立即执行函数(function(){…})() 深入理解javascript中的立即执行函数,立即执行函数也叫立即调用函数,通常它的写法是用(function(){…})()包 ...
- 机器学习进阶-图像金字塔与轮廓检测-轮廓检测 1.cv2.cvtColor(图像颜色转换) 2.cv2.findContours(找出图像的轮廓) 3.cv2.drawContours(画出图像轮廓) 4.cv2.contourArea(轮廓面积) 5.cv2.arcLength(轮廓周长) 6.cv2.aprroxPloyDP(获得轮廓近似) 7.cv2.boudingrect(外接圆)..
1. cv2.cvtcolor(img, cv2.COLOR_BGR2GRAY) # 将彩色图转换为灰度图 参数说明: img表示输入的图片, cv2.COLOR_BGR2GRAY表示颜色的变换形式 ...
- 机器学习进阶-图像形态学操作-开运算与闭运算 1.cv2.morphologyEx(进行各类形态学变化) 2.op=cv2.MORPH_OPEN(先腐蚀后膨胀) 3.op=cv2.MORPH_CLOSE(先膨胀后腐蚀)
1.cv2.morphologyEx(src, op, kernel) 进行各类形态学的变化 参数说明:src传入的图片,op进行变化的方式, kernel表示方框的大小 2.op = cv2.MO ...
- webstorm上svn的安装使用
1.首先要下载SlikSvn网址为:https://sliksvn.com/download/ 进入该网站可以根据需要下载32位的或者64位的svn.下图为要下载的图标样式 点击下载即可. 2.在w ...
- FireDac 组件说明一
TFDManager 连接定义和Connect连接管理 TFDConnection 数据库连接组件,支持三种连接方式:1.持久定义(有一个唯一名称和一个配置文件,可以由FDManager管理) 例: ...