DataFrame基本操作

其实代码就是按照人的思维编写的底层,所有的函数都是按照人类的认知定义的。
1、读取表,设置类索引和行索引
datas=pd.DataFrame(数据表,index=list(''),columns=list(''))
eg:df1 = pd.DataFrame(np.random.randn(3, 3), index=list('abc'), columns=list('ABC'))
2、格式化函数 .format()
格式化字符串函数str.format()将对应的字段转化成个性化的输出。
eg:  print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com"))
网站名:菜鸟教程, 地址 www.runoob.com
数据格式化:print("{:.2f}".format(3.1415926)); 3.14
3、日期的转化函数(import time)
1)将字符串的时间转换为时间戳
a = "2013-10-10 23:40:00"
将其转换为时间数组
timeArray = time.strptime(a, "%Y-%m-%d %H:%M:%S")
转换为时间戳:
timeStamp = int(time.mktime(timeArray))
timeStamp == 1381419600
2)字符串格式更改
如a = "2013-10-10 23:40:00",想改为 a = "2013/10/10 23:40:00"
方法:先转换为时间数组,然后转换为其他格式
timeArray = time.strptime(a, "%Y-%m-%d %H:%M:%S")
otherStyleTime = time.strftime("%Y/%m/%d %H:%M:%S", timeArray)
3)时间戳转换为指定格式日期:
方法一:
利用localtime()转换为时间数组,然后格式化为需要的格式,如
timeStamp = 1381419600
timeArray = time.localtime(timeStamp)
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
otherStyletime == "2013-10-10 23:40:00"
方法二:
importdatetime
timeStamp = 1381419600
dateArray = datetime.datetime.utcfromtimestamp(timeStamp)
otherStyleTime = dateArray.strftime("%Y-%m-%d %H:%M:%S")
otherStyletime == "2013-10-10 23:40:00"
4)获取当前时间并转换为指定日期格式
方法一:
获得当前时间时间戳

now = int(time.time()) ->这是时间戳
转换为其他日期格式,如:"%Y-%m-%d %H:%M:%S"
timeArray = time.localtime(timeStamp)
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
方法二:
获得当前时间
now = datetime.datetime.now() ->这是时间数组格式
转换为指定的格式:
otherStyleTime = now.strftime("%Y-%m-%d %H:%M:%S")
5)获得三天前的时间
方法:
import time
import datetime
先获得时间数组格式的日期
threeDayAgo = (datetime.datetime.now() - datetime.timedelta(days = 3))
转换为时间戳:
timeStamp = int(time.mktime(threeDayAgo.timetuple()))
转换为其他字符串格式:
otherStyleTime = threeDayAgo.strftime("%Y-%m-%d %H:%M:%S")
注:timedelta()的参数有:days,hours,seconds,microseconds
6)给定时间戳,计算该时间的几天前时间:
timeStamp = 1381419600
先转换为datetime
import datetime
importtime
dateArray = datetime.datetime.utcfromtimestamp(timeStamp)-datetime.timedelta(days = 3)
threeDayAgo = dateArray - datetime.timedelta(days = 3)
4、删除表中的重复行
datas=data.drop_duplicates(subset=[' ',' '],keep='',inplace=True(False))
参数设置:subset=[' ',' ']  括号里面的是表的列索引,通过设置可以将列相同的行数据删除,如果按整个行相同进行删除,则不设置即可
keep=' '可选择三个参数: 1)'fist'表示将保留第一次出现的重复行,删除最后的重复行;2)‘last’表示保留最后的重复行,删除前边的重复行,3)False表示删除所有的重复行,默认是fist
inplace=True(False) :True表示直接在原表上进行删除,False表示生成副本进行删除,不改变原表,默认是False
5、DataFrame表的筛选,非常有用的函数
datas=data.loc[(条件1) &(条件2) &(条件3)......,[' ',' ',' ']]
eg:data1=datas.loc[(datas['qy']=='巴南区') &  (datas['jd']=='龙洲湾街道') &   (datas['sq']=='梅家梁社区')]
data.loc[ ] 函数是根据对应单个或多个字段进行联合筛选,获得新的表,同时后面的[' ',' ',' '...,' ' ]可以根据需要的字段进行过滤,用来获取需要的表
6、表字段的重命名
datas=data.rename(index={' ':' ',' ':''},columns={' ':' ',' ':' '})
eg: data2=data1.rename(columns={"count(anjian)":"num"})
对于表可以同时改变多个行索引和列索引,改变的方式 index={' ' :' ',' ':' ' } 对应行索引,:冒号前者为原始索引,后面为新索引,可以同时修改多个行索引,列索引的修改方式一样。
7、统计某条件的发生数量
a=pd.value_counts(data2['num'])   其中,data2['num'] 表示表中列 ,如果之选定列将统计出来该列不同值出现的次数,如果data2['num']>20将表示大于20和小于20的数量。
8、DataFrame的遍历操作
data=pd.DataFrame(inputfile)   将数据转化成表数据
#按行进行遍历
for  index,row in  data.iterrows():   
            print(index)
            print(row[' '],row[' '])
#按行遍历首先要明确是一行一行的进行读取的,index是行索引 row是行的数据,构成一个series,它们共同构成(index,   series)对,对于下面的额两个输出,肯定是一行一行的输出,同时如果print(row) 表示将每行的所有列输出,print(row[''])将指定列输出
            
for  index, row in  data.iteritems():
            print(index)
            print(row[0],row[1])
#按行遍历首先要明确是一列一列的进行读取的,index是列索引 row是列的数据,构成一个series,它们共同构成(index,series)对,对于下面的两个输出,肯定是一列一列的输出,同时如果print(row) 表示将每列的所有行输出,print(row[''])将指定行输出,同时可以用下边进行多行输出,print(row[:10]),将每列的10行进行遍历输出。
9、获取列(行)名列表
columns=datas.columns.values.tolist()
index=datas.index.values.tolist()
10、如何将表中的需要的列生成一张新表进行处理
data1=data[['  ','  ','  ']]   括号里面是需要的字段
11、行索引 操作
loc[]函数;iloc[]函数 都是行索引函数,两个的区别是前者是基于行索引,后者基于行下标
提取行数据如下:
data.loc['range'] 将range行输出
data.iloc[0] #将0行数据输出
提取列数据如下:
data.loc[:,['two']] 将two列的所有数据输出
data.iloc[:,[0]] 将0列的数据输出


提取指定行、指定列数据
data.loc[['one','two'],['zhang','bin']]
data.iloc[[0,1],[2,3]]
12、删除表的某一行或者某一列
eg:data=data.drop('name',axis=1)  #axis=0删除行,axis=1删除列,‘name’用来指定行(列)索引
print(data)
13、将某一列设置为行索引函数
dataframe = dataframe.set_index(["index"])
14、将日期的字符串形式转化成日期,然后可以对于日期进行运算
pd.to_datetime()
将日期转化成字符串形式
data.strftime("%Y-%m-%d")
15、重新设置行索引
data=data.reset_index(drop=True)
16、将某一列设置为行索引
data=data.set_index(['列索引'],inplace=True)
17、pycharm的使用
ctrl+/  注释
tab 整体右移动
shift+tab 整体左移动
18、获取时间的序列
pd.data_range(starttime,endtime)   从sstarttime开始时间到结束时间endtime,生成一个时间序列,可以将其转化成列表进行遍历操作获的每一天的日期
19、将空缺位置值用0进行填充
data_fill=data_fill.fillna(0)
20、将pandas 处理后的数据保存在数据库中的方法 (需要用到sqlalchemy模块,该模块为高效和高性能的数据库访问设计,实现整个企业级持久模型)
import pandas as pd
from sqlalchemy import create_engine  
#连接数据库create_engine,dialect-数据库类型  driver-数据库驱动选择  username-数据库用户名  password-用户密码  host-服务器地址  port-端口  database-数据库
conn=create_engine("dialect+driver://username:password@host:port/database?编码")
eg: engine = create_engine("mysql+pymysql://root:[email protected]:3306/zhcg_bigdata?charset=utf8",echo=True)
#关闭连接
conn.dispose()
#将数据导入到数据库中,dataframe-数据    table_name-表名  con='连接键'  schema='数据库名'  if_exists='操作方式'(append:如果表存在,将数据添加到这个表的后面,fail:如果表不存在就不操作,replace:如果表存在,删了 重建)
pd.io.sql.to_sql(dataframe,'table_name',con=conn,schema='w_analysis',if_exits='append')
conn.dispose()   #关闭连接
weather1 = pd.read_sql(sql, conn)  #利用create_engine连接数据库进行表的操作
21、连接数据库
import  pymysql
#连接数据库
connect=pymysql.connect( host=' ',user=' ' ,password=' ',port=' '  ,db='python',charset='utf-8')
#获取游标
cursor=connect.cursor()
#执行sql语句
sql=' '
cursor.execute(sql)
cursor.fetchall()
#关闭游标  断开连接
cursor.close()
connect.close()
22、程序报错修改笔记
TypeError: only size-1 arrays can be converted to Python scalars

img0 = int(imgs[0]*255)
出现TypeError: only size-1 arrays can be converted to Python scalars
改为 img0 = (imgs[0]*255).astype(np.int),因为img[0]是 numpy形式的数组
23、groupby函数 (进行数据的分组以及组内运算)
该函数就是分组函数,依据单个或多个字段进行分组,然后进行处理


格式: df.groupby(df['属性1','属性2']).运算函数
eg: df.groupby(df['age','name']).mean()
实例链接:https://www.cnblogs.com/Yanjy-OnlyOne/p/11217802.html
24、spyder快捷键操作
 
批量备注:ctrl  +1
25、对于日期的操作

1)将字符串转化成日期格式
time = pd.to_datetime(time)
26、机器学习算法的运行
1、回归模型的运行
语料数据是一张dataframe表,将表中数据data 划分成训练数据data_train和测试数据data_test,然后对于训练数据划分成X_train 和Y_train,对于测试数据分成X_ test 送入模型进行训练和测试,将结果输出一个列表。
27、pandas实现to_sql将dateFrame保存到数据库中
import  pandas as pd
import sqlalchemy import create_engine
engine=create_engine('mysql+pymysql://用户:密码@服务器:端口/数据库名')
pd.io.sql.to_sql(DataFrame,'数据库表',engine,index=False,index_label=False,schema='数据库名',if_exists='append')  #其中'append'表示在原始表的后面追加,replace:如果存在表,删了,重建;fail:如果表存在就不操作
28、linux系统上链接操作数据库
连接数据库:mysql -h hostname -P port -u username -p password
show databases; 显示所有数据库
use dbname; 打开数据库
show tables; 显示数据库mysql中所有的表
show create table tableName;展示数据库创建的详细信息
create database 数据库名   创建数据库
create table ABC  创建表
(
id int not null auto_increment,
name varchar(20) not null default ‘经理’, #设定默认值
description varchar(100),
primary key PK_positon (id) #设定主键
29、DataFrame加入字段
dataframe['字段名']=['','','',...,'']    #对应dataframe加入字段,将一个列表赋值到对应的字段上即可
30、python3代码在Python2上兼容运行
from __future__ import absolute_import, unicode_literals, division, print_function
30、将代码部署到服务器上,定时调用
将脚本部署到 服务器上定时调用
1、crontab -e     Linux的crontab实现定时运行
2、crontab  -l          查看当前服务器定时的任务
3、which  python 查看当前python的路径
3、写完之后输入 Esc 切换成命令方式,i 切换到可编辑格式 ,输入:wq 保存编辑并退出
* * * * *  nohup +python的 绝对路径 + -u脚本的绝对路径(/root/msg.py) +> /tmp/fore.log 2>&1 &(程序的print保存在日志里面,/tmp/fore.log日志的路径)  五个星依次表示 分  时  天  月  周的第几天
 eg: 55 14 * * * nohup /root/anaconda3/bin/python -u /opt/mlx_test.py > /tmp/fore.log 2>&1 &
 eg:  0 5 * * * nohup /usr/local/anaconda_miner/bin/python -u /opt/miner_code/fore/main_new.py > /tmp/fore.log 2>&1 &
4、service crond start   启动服务
5、查看日志  cd 进入日志的位置   cat fore.log



cron 是 linux 的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
service crond status //查看crontab服务状态

2.crontab时间格式内容
*    *    *    *    *    command
M    H    D    m    d    command
分   时   日   月   周   命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令或脚本内容
31、服务器上centos python2与python3并存
安装步骤:
1、python -V 查看当前python的版本   which python  查看当前python的安装位置,进入到python的位置/usr/bin,然后 ll python*  可以查看对应python的信息

2、因为我们要安装python3版本,所以python要指向python3才行,目前还没有安装python3,先备份,备份之前先安装相关包,用于下载编译python3
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make  不能忽略相关包,我之前就没有安装readline-devel导致执行python模式无法使用键盘的上下左右键
3、python3的安装教程
1)bash Anaconda3-5.2.0-Linux-x86_64.sh   运行改代码,一直yes enter
2)sudo vi /etc/profile  配置环境变量  进入后输入i进入编辑模式,将光标放到最后加入
  #Anaconda 
  export PATH=$PATH:/home/software/anaconda3/bin   里面的路径是ananonda3中python安装的位置
  按下ESC键,输入**:,然后输入wq**按下回车就保存退出了
4)最后重新载入配置文件,输入source /etc/profile 
32、centos对于文件的基本操作
1、  mkdir 新建文件夹   
33、构建新的函数
data_relu['itemsets']=data_relu['itemsets'].map(lambda x: ','.join(list(x)))
print(data_relu)    #利用map构建函数,对于Dataframe中某一列进行操作,可以直接将造作后的表输出,存储到数据库中
34、去掉datafram中的含有空字段的行
dataframe=dataframe.dropna(subset=['列名'])
35、将某一具体日期转换成某年第几周
SELECT WEEK(date_add('2019-12-18',interval 6 day),2)
36、数据查看结构
说明:DataFram对于表操作的函数都是对于特征进行处理的
datefrane.info()   快速获得数据集的简单描述,特别是总行数,每个特征的类型和非空值的数量
dataframe[' '].value_count()  快速统计某个特征的不不数值的分布情况
dataframe.describe()   快速统计表中不同特征的数量、均值、方差、最小值、最大值等信息
37、读取文件夹中所有.csv文件,将数据整合到一张表中
file_list=glob.glob(r'D:\work_file\yunnan\data\project_jz\data-freeway\1095110\**.csv')
print(file_list)
dataset = pd.DataFrame(columns=['5 Minutes', 'Lane 1 Flow (Veh/5 Minutes)', 'Lane 1 Speed (mph)','Lane 2 Flow (Veh/5 Minutes)', 'Lane 2 Speed (mph)', 'Lane 3 Flow (Veh/5 Minutes)','Lane 3 Speed (mph)', 'Flow (Veh/5 Minutes)', 'Speed (mph)', '# Lane Points', '% Observed'])
for i in file_list:
    data=pd.read_csv(i)
    data=pd.DataFrame(data)
    print(data.columns.values.tolist())
    dataset = dataset.append(data)
print(dataset)
38、 查看DataFrame中每一列是否存在空值:
temp = data.isnull().any() #列中是否存在空值
print(type(temp))
print(temp)
39、矩阵的合并
行合并:np.row_stack((a,b))
列合并:np.column_stack((a,b))
上面两个函数用于实现两个矩阵的行、列的合并

39、对于DataFrame中数据进行操作,可以采用下边这种直接的方法

data=data[(条件1) 运算符 (条件2)...运算符 (条件3)]
eg、data=data[(data['SUM_YR_1'].notnull()) & (data['SUM_YR_2'].notnull())]

猜你喜欢

转载自blog.csdn.net/zhangzhoubin666/article/details/121159155