大家好,今天小编来为大家介绍几个Pandas
读取数据以及保存数据的方法,毕竟我们很多时候需要读取各种形式的数据,以及将我们需要将所做的统计分析保存成特定的格式。
我们大致会说到的方法有:
-
read_sql()
-
to_sql()
-
read_clipboard()
-
from_dict()
-
to_dict()
-
to_clipboard()
-
read_json()
-
to_json()
-
read_html()
-
to_html()
-
read_table()
-
read_csv()
-
to_csv()
-
read_excel()
-
to_excel()
-
read_xml()
-
to_xml()
-
read_pickle()
-
to_pickle()
read_sql()
与to_sql()
我们一般读取数据都是从数据库中来读取的,因此可以在read_sql()
方法中填入对应的sql
语句然后来读取我们想要的数据,
pd.read_sql(sql, con, index_col=None,
coerce_float=True, params=None,
parse_dates=None,
columns=None, chunksize=None)
参数详解如下:
-
sql: SQL命令字符串
-
con: 连接SQL数据库的Engine,一般用SQLAlchemy或者是PyMysql之类的模块来建立
-
index_col:选择某一列作为Index
-
coerce_float:将数字形式的字符串直接以float型读入
-
parse_dates: 将某一列日期型字符串传唤为datatime型数据,可以直接提供需要转换的列名以默认的日期形式转换,或者也可以提供字典形式的列名和转换日期的格式,
我们用PyMysql
这个模块来连接数据库,并且读取数据库当中的数据,首先我们导入所需要的模块,并且建立起与数据库的连接
import pandas as pd
from pymysql import *
conn = connect(host='localhost', port=3306, database='database_name',
user='', password='', charset='utf8')
我们简单地写一条SQL
命令来读取数据库当中的数据,并且用read_sql()方法来读取数据
sql_cmd = "SELECT * FROM table_name"
df = pd.read_sql(sql_cmd, conn)
df.head()
上面提到read_sql()
方法当中parse_dates
参数可以对日期格式的数据进行处理,那我们来试一下其作用
sql_cmd_2 = "SELECT * FROM test_date"
df_1 = pd.read_sql(sql_cmd_2, conn)
df_1.head()
output
number date_columns
0 1 2021-11-11
1 2 2021-10-01
2 3 2021-11-10
我们来看一个各个列的数据类型
df_1.info()
output
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 number 3 non-null int64
1 date_columns 3 non-null object
dtypes: int64(1), object(1)
memory usage: 176.0+ bytes
正常默认情况下,date_columns
这一列也是被当做是String
类型的数据,要是我们通过parse_dates
参数将日期解析应用与该列
df_2 = pd.read_sql(sql_cmd_2, conn, parse_dates="date_columns")
df_2.info()
output
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 number 3 non-null int64
1 date_columns 3 non-null datetime64[ns]
dtypes: datetime64[ns](1), int64(1)
memory usage: 176.0 bytes
就转换成了相对应的日期格式,当然我们还可以采用上面提到的另外一种格式
parse_dates={"date_column": {"format": "%d/%m/%y"}})
to_sql()
方法
我们来看一下to_sql()
方法,作用是将DataFrame
当中的数据存放到数据库当中,请看下面的示例代码,我们创建一个基于内存的SQLite
数据库
from sqlalchemy import create_engine
engine = create_engine('sqlite://', echo=False)
然后我们创建一个用于测试的数据集,并且存放到该数据库当中,
df = pd.DataFrame({'num': [1, 3, 5]})
df.to_sql('nums', con=engine)
查看一下是否存取成功了
engine.execute("SELECT * FROM nums").fetchall()
output
[(0, 1), (1, 3), (2, 5)]
我们可以尝试着往里面添加数据
df2 = pd.DataFrame({'num': [7, 9, 11]})
df2.to_sql('nums', con=engine, if_exists='append')
engine.execute("SELECT * FROM nums").fetchall()
output