当前位置:   article > 正文

python pymysql+pandas进行筛选合并excel表格处理后导入到两个新表格中的两个sheet_len(cursor.description)

len(cursor.description)

使用Python中操作mysql的pymysql模块从数据库查询数据生成一个excel表,使用pandas从该表中筛选数据到新的两个表再各新建两个sheet。【筛选指定字符行,升降序、筛选分组、要表头,不要序号、不覆盖原有表,新建sheet】

执行SQL

  1. import pymysql
  2. # 创建连接
  3. conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='1234', db='数据库名', charset='utf8')
  4. # 创建游标
  5. cursor = conn.cursor()
  6. # 执行SQL,并返回收影响行数
  7. effect_row = cursor.execute("select * from xxx")
  8. # 获取剩余结果的第一行数据
  9. #row_1 = cursor.fetchone()
  10. #print(row_1)
  11. # 获取剩余结果前n行数据
  12. # row_2 = cursor.fetchmany(3)
  13. # 获取剩余结果所有数据
  14. row_3 = cursor.fetchall()
  15. print(row_3)
  16. # 提交,不然无法保存新建或者修改的数据
  17. conn.commit()
  18. # 关闭游标
  19. cursor.close()
  20. # 关闭连接
  21. conn.close()

r1筛选包含指定字符的列,r2筛选包含指定字符的行

  1. r1=[x for x in df.columns if "指定字符" in x]
  2. r2=df[df['列名'].str.contains('指定字符')]

下面是筛选分组名为an和na,且用户名含k和b两个字符的行,运行结果是预期的但是会警告 。

df = df[(df['分组'] == "na") | (df['分组'] == "an")][df['用户名'].str.contains('k') | df['用户名'].str.contains('b')]

 

升降序

ascending=false:降序

ascending=true:升序

df.sort_values(by=, ascending=)可以单列或多列排序by="A",by=['A', 'B']

  1. df1 = pd.DataFrame(df.sort_values(by=['当天数'], ascending=False)) # 降序
  2. df1 = pd.DataFrame(df.sort_values(by=['当天数'], ascending=True)) # 升序

筛选

  1. df[df['age']>30] #选取所有age大于30的行
  2. df[(df['age']>30) & (df['isMarried']=='no')] #选取出所有age大于30,且isMarried为no的行
  3. df[(df['age']==20) | (df['age']==32)] #选取出所有age为20或32的行
  4. df[[each>30 for each in df['age']]] #选取所有age大于30的行
  5. df[[True,True,True,False,False,False,False,False,False,False]] #选取前三行
  6. df['a':'b'] #选取前两行
  7. df[:'a'] #选取第一行
  8. df[0:1] #选取第一行
  9. df[0:2] #选取前两行
  10. df['name'] #选取name列所有数据
  11. df[['name','age']] #选取name和age两列数据
  12. df[lambda df: df.columns[0]] #选取第一列

只输出数据,不想要表头header或者索引序号index

df.to_excel("xxxxx.xlsx",index=False,header=None)    # header 指定列名,index 默认为True,写行名,不写行名就为None或False

excel已经存在,不覆盖,新建一个sheet

  1. dret = pd.DataFrame.from_records(list(row_2)) # mysql查询的结果为元组,需要转换为列表
  2. dret.to_excel("filename.xlsx", index=False, header=(
  3. '用户名', '分组', '当天数')) #表头
  4. df = pd.read_excel("filename.xlsx")
  5. df = df[(df['分组'] == "an") | (df['分组'] == "na")]
  6. wb = openpyxl.load_workbook('one.xlsx')
  7. writer = pd.ExcelWriter('an.xlsx', engine='openpyxl')
  8. writer.book = wb #没有这句的话excel表将完全被覆盖
  9. df1 = pd.DataFrame(df.sort_values(by=['当天数'], ascending=False)) #按当天数升序
  10. df1.to_excel(writer, sheet_name='sheet_ins', index=None) #不加序号#不覆盖原来的工作表
  11. writer.save()
  12. writer.close()

全部如下:

  1. #!/usr/bin/env pytho
  2. # -*- coding:utf-8 -*-
  3. import os
  4. import openpyxl
  5. import pymysql
  6. import pandas as pd
  7. # 创建连接
  8. conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='1234', db='markets', charset='utf8')
  9. # 创建游标
  10. cursor = conn.cursor()
  11. # 查询1
  12. # 执行SQL,并返回收影响行数
  13. effect_row1 = cursor.execute('''SELECT
  14. ......''')
  15. list1 = []
  16. for i in range(len(cursor.description)):
  17. list1.append(cursor.description[i][0])
  18. print(list1)
  19. row_1 = cursor.fetchall()
  20. print(row_1)
  21. # # 提交,不然无法保存新建或者修改的数据
  22. # conn.commit()
  23. # # 关闭游标
  24. # cursor.close()
  25. # # 关闭连接
  26. # conn.close()
  27. # 查询2
  28. # 执行SQL,并返回收影响行数
  29. effect_row2 = cursor.execute('''SELECT
  30. ......''')
  31. list2 = []
  32. for i in range(len(cursor.description)):
  33. list2.append(cursor.description[i][0])
  34. print(list2)
  35. row_2 = cursor.fetchall()
  36. print(row_2)
  37. # 提交,不然无法保存新建或者修改的数据
  38. conn.commit()
  39. # 关闭游标
  40. cursor.close()
  41. # 关闭连接
  42. conn.close()
  43. # pandas操作表
  44. # 生成xlsx文件的函数 sheet1
  45. dret = pd.DataFrame.from_records(list(row_1)) # mysql查询的结果为元组,需要转换为列表
  46. dret.to_excel("filename.xlsx", index=False, header=(
  47. '用户名', '分组', '当天数')) # header 指定列名,index 默认为True,写行名
  48. df = pd.read_excel("filename.xlsx")
  49. df = df[(df['分组'] == "Chen") | (df['分组'] == "Li")]
  50. writer1 = pd.ExcelWriter(os.path.join(os.getcwd(), 'li.xlsx'))
  51. df.to_excel(writer1, sheet_name='sheet_tiktok', index=None) # startcol=**, startrow=**)
  52. # # dret.to_excel(writer, sheet_name='sheet_ins') # startcol=**, startrow=**)
  53. writer1.save()
  54. # 生成xlsx文件的函数 sheet1
  55. dret = pd.DataFrame.from_records(list(row_1)) # mysql查询的结果为元组,需要转换为列表
  56. dret.to_excel("filename.xlsx", header=(
  57. '用户名', '分组', '当天数'),
  58. index=None) # header 指定列名,index 默认为True,写行名
  59. df = pd.read_excel("filename.xlsx")
  60. df = df[(df['分组'] == "an") | (df['分组'] == "na")]
  61. writer2 = pd.ExcelWriter(os.path.join(os.getcwd(), 'an.xlsx'))
  62. df.to_excel(writer2, sheet_name='sheet_tiktok', index=None) # startcol=**, startrow=**)
  63. writer2.save()
  64. # sheet2
  65. dret = pd.DataFrame.from_records(list(row_2)) # mysql查询的结果为元组,需要转换为列表
  66. dret.to_excel("filename.xlsx", index=False, header=(
  67. '用户名', '分组', '当天数')) # header 指定列名,index 默认为True,写行名
  68. df = pd.read_excel("filename.xlsx")
  69. df = df[(df['分组'] == "Chen") | (df['分组'] == "Li")]
  70. wb = openpyxl.load_workbook('li.xlsx')
  71. writer = pd.ExcelWriter('li.xlsx', engine='openpyxl')
  72. writer.book = wb
  73. df1 = pd.DataFrame(df.sort_values(by=['当天数'], ascending=False))
  74. df1.to_excel(writer, sheet_name='sheet_ins', index=None)
  75. writer.save()
  76. writer.close()
  77. # sheet2
  78. dret = pd.DataFrame.from_records(list(row_2)) # mysql查询的结果为元组,需要转换为列表
  79. dret.to_excel("filename.xlsx", index=False, header=(
  80. '用户名', '分组', '当天数')) # header 指定列名,index 默认为True,写行名
  81. df = pd.read_excel("filename.xlsx")
  82. df = df[(df['分组'] == "an") | (df['分组'] == "na")][df['用户名'].str.contains('k') | df['用户名'].str.contains('b')]
  83. wb = openpyxl.load_workbook('an.xlsx')
  84. writer = pd.ExcelWriter('an.xlsx', engine='openpyxl')
  85. writer.book = wb
  86. df1 = pd.DataFrame(df.sort_values(by=['当天数'], ascending=False)) # 降序
  87. df1.to_excel(writer, sheet_name='sheet_ins', index=None)
  88. writer.save()
  89. writer.close()

 修改excel文件名

  1. import os, sys
  2. # 列出目录
  3. print ("目录为: %s"%os.listdir(os.getcwd()))
  4. # 重命名
  5. os.rename("li.xlsx","li0402.xlsx")
  6. os.rename("an.xlsx","an0402.xlsx")
  7. # 列出重命名后的目录
  8. print("目录为: %s" %os.listdir(os.getcwd()))

参考:

Python中操作mysql的pymysql模块详解

python数据分析之pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[] - 奥辰 - 博客园

python把pandas的内容添加到已有的excel文件中_bin083的博客-CSDN博客_pandas写入已存在的excel

pandas库读取多个excel文件数据并进行筛选合并处理后导入到新表格中_Skyler_Fly的博客-CSDN博客_pandas读取多个excel文件

Pandas怎样对数据进行排序? – 蚂蚁学Python

Python Pandas的使用 !!!!!详解 - 佟大帅 - 博客园

 python筛选字符型列,Pandas如何筛选包含特定字符的列 - 百度文库

pandas小技巧——df如何筛选包含特定字符的列(或者行) - 百度文库

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号