读取数据

  • 应用 pdread_sql 读取数据
import pymysqlimport pandas as pdself.conn = pymysql.connect(host=host, user=user,password=pass, db=db, charset='utf8')sql = 'select * from table_name'df = pd.read_sql(sql, con=self.conn)

空值空格解决

  • 解决空值以及空格应用 pdstrip 办法以及 dropna 办法
df['product_name'].str.strip() # 删除列 `product_name` 为 `NaN` 的行 df.dropna(subset=['product_name'], inplace=True)

异样值解决

  • 解决异样值应用 pdreplace 办法
df.replace(' ', np.nan, inplace=True)

数据从新写入到 MySQL

  • 数据从新写入 MySQL 应用 pdto_sql 办法
df.to_sql(name=table_name, con=self.conn, if_exists='append', index=True)

问题

1、pd 的 to_sql 不能应用 pymysql 的连贯,否则就会间接报错

pandas.io.sql.DatabaseError: Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': not all arguments converted during string formatting

须要改为

from sqlalchemy import create_engineengine = create_engine("mysql+pymysql://user:pass@host:port/db")

2、空值解决的问题

  • 保留在 mysql 中的数据中有空值,然而应用 pd.str.strip() 解决没有用
  • 应用 replace 替换空格、空值为 nan 也没有用

    解决办法:replace 应用正则替换

# 替换\r\n\t以及html中的\xa0df.replace(r'\r|\t|\n|\xa0', '', regex=True, inplace=True)# 替换空格,将空格替换为空字符串df['product_name'].replace(r' ', '', regex=True, inplace=True)# 将空字符串替换为 nandf['product_name'].replace(r'', np.nan, regex=True, inplace=True)# 将乱码替换替换为空字符串(正则为匹配不是中文、字母、数字组成的字符串)df['product_name'].replace(r'[^\u4e00-\u9fa5_a-zA-Z0-9]', np.nan, regex=True, inplace=True)
  • 本文是有 FreeOpenWrite 公布