import pandas as pd df=pd.read_excel(r'D:\CDA\CDA_PGC\datas.xlsx',sheetname='Sheet1') df['日期']=df['日期'].dt.date #去掉‘时分秒’(从excel导入的日期数据默认00:00:00) df['合并列']=df['编号'].map(str)+','+df['日期'].map(str) #将pandas默认的pandas默认的int64类型转为字符串df
Out[15]:
编号 | 日期 | 合并列 | |
---|---|---|---|
0 | 123 | 2020-09-09 | 123,2020-09-09 |
1 | 123 | 2020-09-08 | 123,2020-09-08 |
2 | 345 | 2020-09-09 | 345,2020-09-09 |
3 | 345 | 2020-09-08 | 345,2020-09-08 |
4 | 345 | 2020-09-09 | 345,2020-09-09 |
5 | 123 | 2020-09-09 | 123,2020-09-09 |
In [16]:
df.drop_duplicates('合并列',inplace=True)df
Out[16]:
编号 | 日期 | 合并列 | |
---|---|---|---|
0 | 123 | 2020-09-09 | 123,2020-09-09 |
1 | 123 | 2020-09-08 | 123,2020-09-08 |
2 | 345 | 2020-09-09 | 345,2020-09-09 |
3 | 345 | 2020-09-08 | 345,2020-09-08 |
In [17]:
df.drop(labels=['编号','日期'],axis=1,inplace=True)df
Out[17]:
合并列 | |
---|---|
0 | 123,2020-09-09 |
1 | 123,2020-09-08 |
2 | 345,2020-09-09 |
3 | 345,2020-09-08 |
In [18]:
df['编号'],df['日期']=df['合并列'].str.split(',',1).str df
Out[18]:
合并列 | 编号 | 日期 | |
---|---|---|---|
0 | 123,2020-09-09 | 123 | 2020-09-09 |
1 | 123,2020-09-08 | 123 | 2020-09-08 |
2 | 345,2020-09-09 | 345 | 2020-09-09 |
3 | 345,2020-09-08 | 345 | 2020-09-08 |
In [19]:
df=df.drop(labels=['合并列'],axis=1)df
Out[19]:
编号 | 日期 | |
---|---|---|
0 | 123 | 2020-09-09 |
1 | 123 | 2020-09-08 |
2 | 345 | 2020-09-09 |
3 | 345 | 2020-09-08 |
In [20]:
df.to_excel(r'D:\CDA\CDA_PGC\datas2.xlsx',index=None)#删除index列
wangxishi
2020-09-08
可不可以连接上我本地的sql数据库,然后倒入文件到python可以跑sql代码,或者有其他方法可以倒入文件到python后跑sql代码吗
wangxishi
2020-09-08
data1 = b.drop_duplicates(keep = False)
data2 = b.drop_duplicates(keep = "first")
data2.append(data1).drop_duplicates(keep= False)
这样写 , 不要subset参数了
wangxishi
2020-09-08
是这么写吗
data2 = data1.drop_duplicates(subset=["编号","日期"])
data3 = data1.drop_duplicates(subset=[""编号","日期"],keep = 'first')
data3.append(data2).drop_duplicates(keep= 'first')
wangxishi
2020-09-08
采用采用pandas中的drop_duplicates对数据去两次重,一次将重复数据全部去除(keep=False)记为data1,另一次将重复数据保留一个(keep='first)记为data2;
求data1和data2的差集即可:data2.append(data1).drop_duplicates(keep=False)
data1 = a.drop_duplicates(subset=["编号","日期"]
data2 = a.drop_duplicates(subset=["编号","日期"],keep = False)
data2.append(data1).drop_duplicates(keep=False)
wangxishi
2020-09-08
这是一个小流程: 这里给你举个例子参考一下:
原始数据在txt中 处理有很多不便 想要把它们插入到sql中去
代码如下:
连接数据库:
import MySQLdbconn=MySQLdb.connect(host="localhost",user="root",passwd="root",db="mydatabase",charset="utf8")cursor = conn.cursor()if conn:print("data base has already connected")
打开文件获取一行数据
f = open("data_first.csv","r")f.readline()#因为txt中第一行一般为列名,因此用readline先将这行数据跳过
拼接insert语句
我要插入的数据表为MyData,数据列为21列,第一列为id列。数据表已经在sql中存在,且txt中用逗号隔开的数据列也为21列
insertcolumn = "id "s = "'%s'"for i in range(1,20,1):s = s + ",'%s'"insertcolumn = "Insert into MyData "+"values("+s+")"
循环插入
这一部分需要注意的是,用readline读取的时候,会把每行末尾的\n也读取进去,可以用strip对其进行处理
while True:line = f.readline().strip('\n')#按行读取且处理掉换行符,效果:"\'\n'变为了''if line:#print(line.split(','))list = line.split(',')#数据以逗号分隔,因此用split(',')#print(len(list))#获取长度insertcolumn_full = insertcolumn%tuple(list)#%s的字符串格式化传参只支持元组和字典,不支持列表,因此这里需要用tuple(list)将list转为元组#print(insertcolumn_full)cursor.execute(insertcolumn_full)#运行conn.commit()#事务提交,这句一定要有!否则即使python不报错 数据也无法成功插入sqlelse:break
关闭
cursor.close() conn.close() f.close()
wangxishi
2020-09-08