Python数据分析师2020特训营-Pandas DataFrame 1

数据分析 Python数据分析师2020特训营-Pandas DataFrame 1

Excel及CSV等数据获取与保存

1
2
3
4
5
pandas内置了10多种数据源读取函数,常见的就是CSV和EXCEL
pandas读取出来的数据直接是数据框格式,方便后续的数据处理和分析
可以快速的将数据保存为CSV或者EXCEL格式
参数较多,可以自行控制,但很多时候用默认参数
读取CSV时,注意编码,常用编码为utf-8,gbk,gbk2312等

更改python获取数据的路径

1
2
3
import os
os.getcwd()
os.chdir()

数据类型

1
2
int64 float64 
object:字符串或者字符

read_csv

1
pd.read_csv('xxx.csv',encoding='gbk') 

,encoding

1
2
3
常用的有gbk gbk2312 utf-8

# 数据包含中文读取报错的话,可以试试中文gbk,gbk2312编码或者utf-8

,dtype={‘xx’:str}

1
就算通过,dtype={'xxx':str}设置数据类型为字符串后 显示还是是object

,nrows

1
,nrows=10 只读取十行

,seq

1
一般不用写,因为csv文件本身就是通过','分割数据,pandas.read_csv默认也是用','分割
1
,header=0 这是默认的以第一行为列名,不作为数据读入

,na_values

1
假如数据中是特定数据指的是缺失值(假如404),那么在创建dataframe的时候可以设置na_values=404,那么会显示成nan

read_excel

1
2
3
pd.read_excel('xxx.xlsx',sheet_name='xxx')

跟read_csv参数都差不多

,sheet_name

1
2
3
指定读取哪一个工作页

也可以指定0开始的数字,对应工作页的顺序
案例
1
2
3
4
5
6
7
当遇到每一个sheetname有规律,而且行的意义是一样的时候,可以读取所有sheet进一个大的DataFrame

sheet_names = ['sheet'+str(i) for i in range(1,4)]
data=pd.DataFrame()
for n in sheet_names:
df = pd.read_excel(n,xxx)
data=pd.concat([data,n],axis=0,ignore_index=True)

to_csv

1
df.to_csv('xxx.csv')

,index

1
,index=False #保存数据时不保存行索引

,encoding

to_excel

1
类似

数据库数据获取和保存

1
2
3
4
使用sqlalchemy建立连接
需要知道数据库的相关参数,如数据库IP地址、用户名和密码等
通过pandas中read_sql函数读入
通过dataframe的to_sql方法保存

创建连接

1
2
3
4
5
import pymysql
import pandas as pd
from sqlalchemy import create_engine

conn = create_engine('mysql+pymysql://用户名:密码@IP:端口号/数据库名') # 可以用create_engine创建不同数据库的链接如:mysql,oracle,postgresql等

read_sql()

1
2
sql='select * from t'
df1=pd.read_sql(sql,conn)

使用函数封装方便使用

1
2
3
4
5
6
7
8
9
def load_data(table):
user='root'
password='tyy123456'
IP='192.168.10.171'
Port=3306
database='test'
conn=create_engine(r'mysql+pymysql://{}:{}@{}:{}/{}'.format(usr,password,IP,Port,database))
sql = 'select * from %s'%(table)
return pd.read_sql(sql,conn)

to_sql()

1
2
3
4
5
6
df = pd.read_csv('xxx.csv')
conn = create_engine('mysql+pymysql://用户名:密码@IP:端口号/数据库名')
try:
df.to_sql('table1',con=conn,index=False,if_exist='replace')
except:
print('error')

,if_exist=’xx’

1
2
3
replace
append
fail