目录
一、读取文件:
1、from database
import pymysql
from sqlalchemy import create_engine
conn = create_engine('mysql+pymysql://root:123456@localhost:3306/databasename?charset=utf8')
sql = 'select * from tb_name'
df = pd.read_sql(sql=sql,con=con,index_col=True,coerce_float=True,columns=True)
# 或者:
df = pd.read_sql_table(tablename,con=con,index_col=True,coerce_float=True,columns=True)
""" sql--查询语句 ,con--数据库连接信息(地址,用户名,密码,数据库名称)
index_col--设定的列作为行名,默认为None ,coerce_float--将数据库中的decimal的数据
转换为pandas里的float64类型,默认为True ,columns--读取数据的列名,默认为None"""
# 将表存入mysql:
pd.io.sql.to_sql(df,tablename,con=con,if_exists='fail')
# if_exists的参数有fail(如果表存在,则不写入),
# replace(代替原来的表),append(在原来的表上追加数据)
2、from csv/tsv
对于tsv文件,可以使用read_csv()函数,其中sep='\t'.
pd.read_table(filepath,sep='\t',header='infer',names=None,index_col=None,
dtype=None,encoding='utf-8',nrows=None)
pd.read_csv(filepath,sep=',',header='infer',names=None,index_col=None,
dtype=None,encoding='utf-8',nrows=None)
"""header--将某行数据作为列名,默认infer,表示自动识别.无列名则header=None
names--接受array,自定义列名,nrows表示读取前n行,默认为None """
df.to_csv(path_or_buf,sep=',',na_rep='',columns=None,header=True,index=True,
index_label=None,mode='w',encoding='utf-8')
""" path_or_buf--存储的路径 na_rep--代表缺失值 columns--写出的列名 header--是否将列名
写出 mode--数据写入模式,默认‘w’ """
3、from excel
pd.read_excel(filepath,sheetname='',header='infer',names=None,index_col=None,
dtype=None)
# sheetname--接受string,int,数据表的位置,默认0 header--将某行作为列名,默认infer
# names--接受array,自定义列名
df.to_excel(excel_writer,sheetname='',na_rep='',header=True,index=True,
index_label=None,mode='w',encoding='utf-8')
# excel_writer--存储文件路径 sheetname--sheet表名,默认sheet1
二、增删改查 DataFrame
1、常用属性
df.values # 查看所有元素
df.index # 查看索引
df.columns # 查看所有列名
df.dtype # 查看字段类型
df.size # 元素总数
df.ndim # 表的维度数
df.shape # 返回表的行数与列数
df.info # DataFrame的详细内容
df.T # 表转置
# 用于生成描述性统计数据,统计数据集的集中趋势,分散和行列的分布情况,不包括 NaN值
df.describe(percentiles=None,include=None,exclude=None)
# DataFrame.isnull is an alias for DataFrame.isna.
2、 访问DataFrame的数据
# 基本查看方式
单列数据:df['col1']
单列多行:df['col1'][2:7]
多列多行:df[['col1','col2']][2:7]
多行数据:df[:][2:7]
前几行: df.head()
后几行: df.tail()
# loc[行索引名称或条件,列索引名称]
# iloc[行索引位置,列索引位置]
单列切片:df.loc[:,'col1']
df.iloc[:,3]
多列切片:df.loc[:,['col1','col2']]
df.iloc[:,[1,3]]
花式切片:df.loc[2:5,['col1','col2']]
df.iloc[2:5,[1,3]]
条件切片:df.loc[df['col1']=='245',['col1','col2']]
df.iloc[(df['col1']=='245').values,[1,5]]
# 增删改
df.loc[df['col1']=='258','col1']=214
# 注意:数据更改的操作无法撤销,更改前最好对条件进行确认或者备份数据
df['col2'] = 计算公式/常量
# 删除某几行数据,inplace为True时在源数据上删除,False时需要新增数据集
df.drop(labels=range(1,11),axis=0,inplace=True)
# 删除某几列数据
df.drop(labels=['col1','col2'],axis=1,inplace=True)
三、Compare DataFrames
pandas.DataFrame.gt — pandas 1.5.0 documentation
pandas.DataFrame.lt
pandas.DataFrame.gt
pandas.DataFrame.le
pandas.DataFrame.ge
pandas.DataFrame.ne
pandas.DataFrame.eq
四、其他-categorical分类变量
categorical是Pandas中的分类类型数据,当数据只有少数几种可能取值但有大量重复字符串字段,利用categorical类型可有效节省内存,提高数据分析的效率。常见的分类如性别、职业等取值有限的类别数据
import seaborn as sns
df = sns.load_dataset('titanic')
df_cat = df
参考资料:
1 pandas.DataFrame.info — pandas 1.5.2 documentation
2 pandas.DataFrame.describe方法小析 - 知乎
3 Pandas中节约空间的小tip——Categorical类型 - 知乎
4 (数据科学学习手札68)pandas中的categorical类型及应用 - 费弗里 - 博客园
5 Python读取excel三大常用模块到底谁最快,附上详细使用代码 - 腾讯云开发者社区-腾讯云