一、读写不同数据源的数据
1.1 读写数据库数据
数据库产品名+连接工具名字://用户名: 密码@数据库ip地址:数据库端口号/数据库名称?charset = “utf-8”
1、 需额外导入 SQLAlchemy库
2、与MySQL建立连接需要连接工具 pymysql库, 使用create_engin()
,建立一个数据库连接对象
engine = create_engine("mysql+pymysql://root:xxxxx@localhost:3306/test?charset=utf8")
1 读取表 or 查询
pd.read_sql("*****", con = engine)
data = pd.read_sql("select * from job where rate = 20", con = engine )
返回 DataFrame 对象
2 写入mysql
pd.to_sql("*****", con = engine)
data.to_sql("tmp", con = engine, if_exists = "repalace or fail", index = F)
index 代表是否将行索引 传入数据库,默认T
1.2 读写文本文件 txt ,csv
主要区别就是 分隔符 吧
1 pd.read_table(path, sep = "\t", header = 'infer') # infer表示表头自动识别
2 pd.read_csv(path, sep = ",", header = "infer")
data = pd.read_csv("E:/learning_home/tongji/exprement5.csv", encoding="utf8")
data.to_csv(path)
1.3读写excel文件
data = pd.read_excel(path, sheet_name = 0, header = "infer")
data.to_excel(excel_writer = "这个excel", sheet_name) # sheetname没写默认叫sheet1
如果想往一个excel里面同时写入 多个sheet 用:
with pd.ExcelWriter("这个excel") as w:
data.to_excel(w, sheet_name = "a")
data.to_excel(w, sheet_name = "b")
二、DataFrame的常用操作切片
loc可支持列名访问,也可以数字访问, iloc只支持下标访问
data[3:6] # 取3-6行,是dataframe对象
data.iloc[2, 2] or data.loc[2, "dishes_id"] # 访问 2, 2 单元
有关 `iloc` 和 `loc` 的索引切片问题,iloc是左闭右开,loc是左右闭
data.iloc[2:5, 2] vs data.loc[2:5, "dishes_id"] # 返回2-5行,第2列数据,还是一个dataframe
dataframe修改数据 是在原数据中修改的。
提取 oder_id 为 123 的 oder_name
data2 = data.loc[data["oder_id"] == "123", "oder_name"]
data2["order_id"] = "100" # 直接 = 修改
为dataframe添加一列,只需要新增一个列索引
data2["sum"] = data2["sal"] * data2["amount"]
删除某一行或列
data2.drop(lables = "sum", axis = 1)
data2.delete["sum"] 《----倾向于这个,就不用管轴向了
数值型特征统计
data["sum"].mean()
data.describe() # 展示全部信息
类别型特征统计
频数统计
data["dishes_name"].value_counts()
astype方法将目标特征的数据类型转换为 category类别
data["dishes_name"].astype("category").describe()
问题记录:
pandas想获取df的表头名字,df.columns[i]
,得到的每一个是 series,如果我想获取它的名字,不能直接用str().这会把series下面的内容全展示了,而用 series.name
属性
三、处理时间序列数据(Pandas继承了Numpy和datetime库的时间相关模块)
时间格式读入的是字符串类型。so we 把 字符串的时间 ------> 标准时间类型
pd.to_datatime("2020-5-20") # datetime对象
pd.DatetimeIndex(data["use_start_time"]) # 生成索引
pd.PreiodIndex(data["use_start_time"], freq = "S") # 时间段间隔 一定要指定freq参数
Timedelta类 :加减时间操作,时间的平移很方便
data["use_start_time"] + pd.Timedelta(days = 1)
(:以上材料来自视频学习记录