Pandas数据加载[read_csv/read_table/sqlite3.connect/read_sql/pymysql.connect/create_engine]

本文介绍如何使用Pandas库进行数据处理,包括从CSV、SQLite和JSON等不同来源读取数据,并展示了数据清洗、格式调整及写入不同格式文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pandas提供了一些用于将表格型数据读取为DataFrame对象的函数,期中read_csv和read_table这两个使用最多

导包

import pandas as pd
from pandas import Series,DataFrame
import numpy as np

使用read_csv将其读入

# SMSSpanCollection 文件,没有标题  sep:分隔符为界限
sms = pd.read_csv('./data/SMSSpamCollection',sep = '\t',header = None)
sms.columns = ['label','message']
sms

 

使用read_table读取

pd.read_table('./data/SMSSpamCollection',header = None)

# ;,.-
# 指明sep,分开
pd.read_csv('./type-.txt',sep = '-',header = None)

 

读取sqlite文件

  • 导包sqlite3
import sqlite3
conn = sqlite3.connect('./data.sqlite')

 

  • pd.read_sql("sql语句", con)
df_weather = pd.read_sql('select * from Weather_2017',conn)
df_weather.shape
Out: (26352, 9)

df_weather

写入sql文件

  • ① 转换时间字段的格式
df_weather.dtypes
Out:
index                   int64
Date/Time              object
Temp (C)              float64
Dew Point Temp (C)    float64
Rel Hum (%)             int64
Wind Spd (km/h)         int64
Visibility (km)       float64
Stn Press (kPa)       float64
Weather                object
dtype: object

df_weather['Date/Time'] = pd.to_datetime(df_weather['Date/Time'],format='%d/%m/%Y')
df_weather.dtypes
Out:
index                          int64
Date/Time             datetime64[ns]
Temp (C)                     float64
Dew Point Temp (C)           float64
Rel Hum (%)                    int64
Wind Spd (km/h)                int64
Visibility (km)              float64
Stn Press (kPa)              float64
Weather                       object
dtype: object
  • ② 写入 csv/json/html/sql 格式的数据文件
df_weather.to_csv('./weather.csv')
df_weather.to_json('./weather.json')
df_weather.to_html('./weather.html')
df_weather.to_sql('Weather_2018',conn)

# 读取
pd.read_json('./weather.json').sort_index()

 

连接pymysql

  • 导包

import pymysql
  • 连接
conn = pymysql.connect(host = 'localhost',port = 3306,
    user = 'softpo',password = 'root',db = 'books',charset='utf8')
conn
  • 读取
book = pd.read_sql('select * from shu limit 30',conn)
book.shape
Out: (30, 5)
  • 直接写入数据会报错!
# 向mysql中写入数据
book.to_sql('read',conn)
Out:
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
~\Anaconda3\lib\site-packages\pandas\io\sql.py in execute(self, *args, **kwargs)
   1399             else:
-> 1400                 cur.execute(*args)
   1401             return cur
………………略
  • 正确的写入方式
from sqlalchemy import create_engine  
'''  
将数据写入mysql的数据库,但需要先通过sqlalchemy.create_engine建立连接,
且字符编码设置为utf8,否则有些latin字符不能处理 
''' 
conn = create_engine('mysql+mysqldb://softpo:root@localhost:3306/books?charset=utf8')  

book.to_sql('read',conn,index=False,if_exists='append')

 

根据url获取网络上的数据

url = 'https://raw.githubusercontent.com/datasets/investor-flow-of-funds-us/master/data/weekly.csv'

df = pd.read_csv(url)
df

 

 

 

 

 

 

 

 

import sqlite3 import pandas as pd from sqlalchemy import create_engine from sqlalchemy.exc import OperationalError from backend.config import DATABASE_URI def get_engine(): """创建数据库引擎(兼容SQLite/MySQL)""" return create_engine(DATABASE_URI) def init_db(): """初始化数据库表(首次运行时执行)""" engine = get_engine() # 使用原始SQL语句创建表,明确指定类型 with engine.connect() as conn: # 创建原始数据表 conn.execute(""" CREATE TABLE IF NOT EXISTS raw_data ( id TEXT PRIMARY KEY, name TEXT, gender TEXT, age INTEGER, birth_date TEXT, address TEXT, systolic_pressure REAL, diastolic_pressure REAL, blood_sugar REAL, createTime DATETIME ) """) # 创建预测结果表 conn.execute(""" CREATE TABLE IF NOT EXISTS predict_results ( id TEXT PRIMARY KEY, predict_time TEXT, systolic_6m REAL, diastolic_6m REAL, blood_sugar_6m REAL, prev_hypertension INTEGER, prev_hyperglycemia INTEGER, pred_hypertension INTEGER, pred_hyperglycemia INTEGER ) """) print("数据库初始化完成") def import_raw_data(): """导入原始数据(从xlsx到数据库)""" engine = get_engine() try: # 读取xlsx文件,修正文件路径 df = pd.read_excel("/data/raw_data.xlsx") print("转换前createTime列基本信息:") df['createTime'].info() print("转换前createTime列前几行:") print(df['createTime'].head().to_csv(sep='\t', na_rep='nan')) # 确保createTime列存在且格式正确 if 'createTime' in df.columns: # 明确指定日期时间格式,将createTime转换为datetime类型 df['createTime'] = pd.to_datetime(df['createTime'], format='%Y/%m/%d %H:%M:%S', errors='coerce') print("转换后createTime列基本信息:") df['createTime'].info() print("转换后createTime列前几行:") print(df['createTime'].head().to_csv(sep='\t', na_rep='nan')) # 处理无法解析的日期 invalid_dates = df['createTime'].isna().sum() if invalid_dates > 0: print(f"警告: {invalid_dates} 条记录的日期无法解析,已设置为NaT") # 删除 我的表格列 是createtime 那我改怎么改
最新发布
07-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值