Pandas导入和导出数据的形式有文件(excel,csv,txt)和数据库(mysql),常用的载入函数有read_csv,read_excel,read_table和read_sql等。
数据的导入和导出也是依赖Pandas这个库的
1.mysql
DataFrame数据导入到mysql
from pandas import Series,DataFrame
import pandas as pd
import pymysql
db_conf = {
"host":"127.0.0.1",
"user":"root",
"password":"自己的数据库密码",
"database":"test",
"cursorclass":pymysql.cursors.DictCursor,
"charset":"utf8"
}
conn = pymysql.connect(**db_conf)
#法1
sql = "select * from proxy"
df = pd.read_sql(sql,conn) #数据从数据库写入到变量
conn.close()
print(df.head()) #获取前5行
#法2
sql = "select * from proxy"
try:
with conn.cursor() as cursor:
res = cursor.execute(sql)
data = cursor.fetchall()
finally:
conn.close()
df=DataFrame(data)
print(df.head())
#法3
import sqlalchemy
import pandas as pd
engine = sqlalchemy.create_engine("mysql+pymysql://root:自己的数据库密码@127.0.0.1:3306/test")
df = pd.read_sql("lagou",engine)
print(df.head())
DataFrame导入到mysql
如果是导入数据库,那么不能用pymysql这个库,只能用sqlalchemy库
# coding = utf-8
from pandas import Series,DataFrame
import pandas as pd
import pymysql
from sqlalchemy import create_engine
db_conf = {
"host":"127.0.0.1",
"user":"root",
"password":"自己的密码",
"database":"test",
"cursorclass":pymysql.cursors.DictCursor,
"charset":"utf8"
}
conn = pymysql.connect(**db_conf)
cursor = conn.cursor()
sql = "select * from proxy"
df = pd.read_sql(sql,conn)
# print(df.head())
df2 = df.head()
engine = create_engine("mysql+pymysql://root:自己的密码@127.0.0.1:3306/test?charset=utf8")
#df2存入数据库
df2.to_sql(
name="proxy2", #要存入的表名
con = engine,
if_exists='append',
index=False,
index_label=False
)
PS:to_sql的if_exists参数
fail的意思如果表存在,啥也不做
replace的意思,如果表存在,删了表,再建立一个新表,把数据插入,相当于覆盖
append的意思,如果表存在,把数据插入,如果表不存在创建一个表,相当于新增
如果是由to_sql自动建表的话,那么他的表字段数字是bigInt型,字符串是text类型
所以如果想要字段是自己设置的字段类型,那么就自己建表吧
2. csv
导入:
df=DataFrame(...)
df.to_csv(文件路径,index)
其中index参数为False表示写入csv时没有行号,默认为True
导出:
df = pd.read_csv(路径,names=[列名1,列名2,列名3,...],sep="")
第二参表示只取指定列名,第三参是列的分隔符
3.Excel
导入:
to_excel(file,index=True,header=True)
index是是否写入行号
header是是否写入列名
导出:
read_excel(file,sheet_name,header=0)
sheetname是sheet的名称
header表示是否读取第一行作为列名,只能为0或者1
如果需要读取一个Excel的多个sheet的数据并且合并可以:
df = pd.read_excel(file,sheet_name=[0,2],skiprows=[0])
skiprows是读取的时候跳过第一行,就是列名
数据从TXT导出
df = pd.read_table(file,names=[列名1,列名2,...],sep="")