目录
一、pandas常用options
1.Pandas option api 目录
pandas.describe_option
pandas.reset_option
pandas.get_option
pandas.set_option
pandas.option_context
2.set_option显示output所有行列
import pandas as pd
#显示所有列
pd.set_option('display.max_columns', None)
#显示所有行
pd.set_option('display.max_rows', None)
#设置value的显示长度为100,默认为50
pd.set_option('max_colwidth',100)
其他设置方式:
pd.set_option('display.max_rows', 100)
pd.set_option('display.max_columns', 1000)
pd.set_option("display.max_colwidth",1000)
pd.set_option('display.width',1000)
二、创建series 与 dataframe
1.Series创建方式
(1)使用数组生成
import numpy as np
arr1 = np.arange(10)
s1 = pd.Series(arr1,index=range(10))
(2)使用字典生成
#使用一个字典生成Series,其中字典的键,就是索引
dict1={'a':1, 'b':2, 'c':3}
s3 = pd.Series(dict1)
(3)使用列表生成
import pandas as pd
s1 = pd.Series([1, 2, 3, 4])
s2 = pd.Series([1, 2, 3, 4],index=range(4))
s3 = pd.Series([1, 2, 3, 4],index=range(0,8,2))
2.Dataframe创建方式
(1)使用数组生成
arr2 = np.array(np.arange(12)).reshape(4,3)
df1 = pd.DataFrame(arr2,columns=('a','b','c'))
(2)使用字典生成
1)字典列表方式
dict2 = {'a':[1,2,3,4],'b':[5,6,7,8],'c':[9,10,11,12],'d':[13,14,15,16]}
df2 = pd.DataFrame(dict2)
#输出结果:
a b c d
0 1 5 9 13
1 2 6 10 14
2 3 7 11 15
3 4 8 12 16
2)嵌套字典方式
dic3 = {'one':{'a':1,'b':2,'c':3,'d':4},'two':{'a':5,'b':6,'c':7,'d':8},'three':{'a':9,'b':10,'c':11,'d':12}}
df3 = pd.DataFrame(dic3)
#输出结果:
one three two
a 1 9 5
b 2 10 6
c 3 11 7
d 4 12 8
(3)使用list生成
import pandas as pd
list1=[[1, 2, 3, 4], [5, 6, 7, 8]]
df=pd.DataFrame(list1,index=('a','b'))
3.创建空series或空dataframe
df=pd.DataFrame()
s = pd.Series()
三、pandas文件读写
1.Pandas Input/Output API目录
- pandas.read_pickle
- pandas.read_table
- pandas.read_csv
- pandas.read_fwf
- pandas.read_clipboard
- pandas.read_excel
- pandas.ExcelFile.parse
- pandas.ExcelWriter
- pandas.read_json
- pandas.json_normalize
- pandas.io.json.build_table_schema
- pandas.read_html
- pandas.read_hdf
- pandas.HDFStore.put
- pandas.HDFStore.append
- pandas.HDFStore.get
- pandas.HDFStore.select
- pandas.HDFStore.info
- pandas.HDFStore.keys
- pandas.HDFStore.groups
- pandas.HDFStore.walk
- pandas.read_feather
- pandas.read_parquet
- pandas.read_orc
- pandas.read_sas
- pandas.read_spss
- pandas.read_sql_table
- pandas.read_sql_query
- pandas.read_sql
- pandas.read_gbq
- pandas.read_stata
- pandas.io.stata.StataReader.data_label
- pandas.io.stata.StataReader.value_labels
- pandas.io.stata.StataReader.variable_labels
- pandas.io.stata.StataWriter.write_file
2.read_csv读取csv/txt
(1)常用案例
- import pandas as pd
- data = pd.read_csv(file_path, header=0, index_col=False, low_memory=False)
- data=pd.read_csv(file,header=0,index_col=False,error_bad_lines=False,low_memory=False)
- data=pd.read_csv('D:/project/python_instruct/test_data3.csv', index_col=['key1', 'key2'])
- data = pd.read_csv(file_path, header=0, skiprows=[0, 1, 2, 3, 4, 5, 6])
- data = pd.read_csv(seo_file,header=0, index_col=False,error_bad_lines=False,low_memory=False)
-
data = pd.read_csv(file_path, header=0, skiprows=[0, 1, 2, 3, 4, 5,6], index_col=False, low_memory=False)
(2)常用参数
- sep=',' 指定逗号为字段分隔符
- escapechar=‘\\’ 指定反斜杠为转义符
- quotechar=‘"’ 指定双引号为字段引用符
- header=0或None 指定第几行数据为表头
- names=['c1','c2'] 在header=None下指定列名
- index_col 用作行索引的列编号或者列名,如果给定一个序列则有多个行索引。
- dtype 每列数据的数据类型
- skiprows 需要忽略的行数,或需要跳过的行号列表(0为首行)
- nrows 需要读取的行数
- na_values 一组用于替换NA/NaN的值
3.read_table读取csv/txt
read_table 与 read_csv 语法参数都相同,参考 read_csv
4.to_csv输入csv 或 txt
(1)语法:
DataFrame.to_csv(path_or_buf=None, sep=', ', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, mode='w', encoding=None, compression='infer', quoting=None, quotechar='"', line_terminator=None, chunksize=None, tupleize_cols=None, date_format=None, doublequote=True, escapechar=None, decimal='.')
(2)常用案例
- import pandas as pd
- file='/home/ubuntu/seo/res/res_juvo_amzseo_20200815.csv'
- data.to_csv(file,header=True,index=False,encoding='utf-8')
- #使用\t分隔,不写默认是逗号
- dt.to_csv('C:/Users/Result.csv',sep='\t')
- #空值保存为NA,不写默认是空
- dt.to_csv('C:/Users/think/Desktop/Result1.csv',na_rep='NA')
- #保留两位小数
- dt.to_csv('C:/Users/think/Desktop/Result1.csv',float_format='%.2f')
- #导出指定列
- dt.to_csv('C:/Users/think/Desktop/Result.csv',columns=['name'])
- #保留行索引
- dt.to_csv('C:/Users/think/Desktop/Result1.csv',index=True)
(3)常用参数
- sep=‘,’ 指定逗号为字段分隔符
- escapechar=‘\\’ 指定反斜杠为转义符
- quotechar=‘"’ 指定双引号为字段引用符
- quoting=0 指定0(QUOTE_MINIMAL) 表示最小量用双引号括起来,若字段内有逗号会括起来,1(QUOTE_ALL)全部括起来,2(QUOTE_NONNUMERIC)只括非数值字段(若字段dtype为浮点数也会括起来),3(QUOTE_NONE)全部不括
- doublequote=False 指定为True时,且指定quotechar=‘"’和quoting=0,则如 ab\”cd 导出会变成 ab""cd , 若为False,ab\”cd 导出还是ab\”cd
5.read_sql读取数据库
read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)
- sql:指sql语句
- con: 指数据库connection
- index_col:读取数据后dataframe的索引,默认为None,可指定数据库表的一行或多行作为索引
- coerce_float:试图将值转换为非字符串,将非数值对象转为浮点
- columns:筛选表中需要的列,以列表方式指定
- chunksize:输入为int类型,如果指定,返回一个迭代器,'ChunkSize'是在每个块中包含的行数,若指定chunksize=3,则每块有3行数据
import pymysql
import pandas as pd
db=pymysql.connect(host="192.111.1.211",port=3306,user="xxxx",passwd="ffdd",db="xxxx",charset="utf8")
sql = "select * from tmp_hlq_098fdf where department='HC'"
df = pd.read_sql(sql,con=db)
#采用表单字段值作为dataframe索引
df = pd.read_sql(sql,db_mysl,index_col="purchase_date")
#采用表多字段作为dataframe索引
df = pd.read_sql(sql,db_mysl,index_col=(['department','purchase_date']))
数据表转为dataframe架构
import pandas as pd
import pymysql
con = pymysql.connect(host='192.1111.0.10', user='lwn', passwd='dddddd', db='ddd', port = 3306)
cur = con.cursor()
cur.execute(sql)
data = cur.fetchall()
#转为dataframe
df = pd.DataFrame(list(data))
con.commit()
cur.close()
6.to_sql存入数据库
语法:
DataFrame.to_sql(name, con, schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None, method=None)
参数:
- if_exists:如果表存在的处理方式 fail:取消存储 ,replace:替换 ,append:附加到旧表
- index:是否将行标签存储入SQL表
- index_label:如果存储行标签
案例
import pymysql
import pandas as pd
db=pymysql.connect(xxxx)
df.to_sql(name='table1', con=engine, if_exists='append', schema='test', index=False)
7.read_excel读取excel
语法:
pandas.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, parse_cols=None, usecols=None, squeeze=False, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, keep_default_na=True, verbose=False, parse_dates=False, date_parser=None, thousands=None, comment=None, skip_footer=0, skipfooter=0, convert_float=True, mangle_dupe_cols=True, **kwds)
参数说明:
- io :excel 路径;
- sheet_name:默认是sheetname为0,返回多表使用sheetname=[0,1],若sheetname=None是返回全表 。
- header :指定作为列名的行,默认0,即取第一行,数据为列名行以下的数据;若数据不含列名,则设定 header = None;
- skiprows:省略指定行数的数据
- skipfooter:省略从尾部数的行数据
- index_col :指定列为索引列,也可以使用 u’string’
- names:指定列的名字,传入一个list数据
- true_values : list,默认无,要视为True的值。
- false_values : list,默认无,要考虑为False的值。
- skiprows : list-like,行开头跳过(0索引)。
- nrows : int,默认无,要解析的行数。
- na_values : 标量,str,list-like或dict,默认无,要识别为NA / NaN的其他字符串。
- keep_default_na : bool,默认为True
- #如果指定了na_values且keep_default_na为False,则会覆盖默认的NaN值,否则它们将被附加到。
- skip_footer : int,默认值为0
- # skipfooter的别名。从版本0.23.0开始不推荐使用:改用skipfooter。
- skipfooter : int,默认值为0
- # 最后的行跳过(0索引)。
- convert_float : bool,默认为True
- # 将整数浮点数转换为整数(即1.0 - > 1)。如果为False,则所有数字数据都将作为浮点数读入:Excel将所有数字存储为内部浮点数。
- mangle_dupe_cols : bool,默认为True
- # 重复的列将被指定为'X','X.1', 'X.N',而不是'X' 'X'。如果列中存在重复的名称,则传入False将导致数据被覆盖。
案例:
import pandas as pd
pd.read_excel('/rfqDict.xlsx',sheet_name=0,header = 0,skipfooter= 1,index_col=False)
pd.read_excel('tmp.xlsx', index_col=0)
pd.read_excel(open('tmp.xlsx', 'rb'),sheet_name='Sheet3')
pd.read_excel('tmp.xlsx', index_col=None, header=None)
#推断了列类型,但可以明确指定
pd.read_excel('tmp.xlsx', index_col=0,dtype={'Name': str, 'Value': float})
#指定定义为NaN的值
pd.read_excel('tmp.xlsx', index_col=0,na_values=['string1', 'string2'])
#可以使用comment 跳过excel输入文件中的注释行
pd.read_excel('tmp.xlsx', index_col=0, comment='#')
8.to_excel输出excel
语法
DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None)
参数
- excel_writer : 字符串或ExcelWriter 对象 文件路径或现有的ExcelWriter
- sheet_name :字符串,默认“Sheet1” 将包含DataFrame的表的名称。
- na_rep : 字符串,默认‘ ’ 缺失数据表示方式
- float_format : 字符串,默认None 格式化浮点数的字符串
- columns : 序列,可选 要编写的列
- header : 布尔或字符串列表,默认为Ture。 写出列名。如果给定字符串列表,则假定它是列名称的别名。
- index :布尔,默认的Ture 写行名(索引)
- index_label : 字符串或序列,默认为None。 如果需要,可以使用索引列的列标签。如果没有给出,标题和索引为true,则使用索引名称。如果数据文件使用多索引,则需使用序列。
- startrow : 左上角的单元格行来转储数据框
- startcol : 左上角的单元格列转储数据帧
- engine : 字符串,默认没有 使用写引擎 - 您也可以通过选项io.excel.xlsx.writer,io.excel.xls.writer和io.excel.xlsm.writer进行设置。
- merge_cells : 布尔,默认为Ture 编码生成的excel文件。 只有xlwt需要,其他编写者本地支持unicode。
- inf_rep : 字符串,默认“正” 无穷大的表示(在Excel中不存在无穷大的本地表示)
- freeze_panes : 整数的元组(长度2),默认为None。 指定要冻结的基于1的最底部行和最右边的列
案例
basestation ="F://python/data/test.xls" basestation_end ="F://python/data/test_end.xls" data = pd.read_excel(basestation)
data.to_excel(basestation_end,header=["a","b","c","d"])
data.to_excel(basestation_end,header=False,columns=["ID"])
data.to_excel(basestation_end,index=False)
data.to_excel(basestation_end,sheet_name="sheet2")
#Create, write to and save a workbook:
>>> df1 = pd.DataFrame([['a', 'b'], ['c', 'd']],index=['row 1', 'row 2'],columns=['col 1', 'col 2'])
>>> df1.to_excel("output.xlsx") # doctest: +SKIP
#To specify the sheet name:
>>> df1.to_excel("output.xlsx",sheet_name='Sheet_name_1') # doctest: +SKIP
>>> df2 = df1.copy()
>>> with pd.ExcelWriter('output.xlsx') as writer: # doctest: +SKIP
df1.to_excel(writer, sheet_name='Sheet_name_1')
df2.to_excel(writer, sheet_name='Sheet_name_2')
>>> df1.to_excel('output1.xlsx', engine='xlsxwriter')