python - 将具有以下结构的 csv 文件导入 SQLite
问题描述
我之前发表了一篇关于将数据导入 SQlite的帖子(将 excel 数据导入数据库 - 初学者)。
我做了一些进一步的研究,现在了解了基础知识,因此我创建了以下代码:
import sqlite3
conn = sqlite3.connect('financials.db')
cur = conn.cursor()
cur.execute('DROP TABLE IF EXISTS financials')
cur.execute('''
CREATE TABLE "financials"(
"Mkt_Cap" REAL,
"EV" REAL,
"PE" REAL,
"Yield" REAL
)
''')
fname = input('Enter the name of the csv file:')
if len(fname) < 1 : fname="data.csv"
with open(fname) as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
for row in csv_reader:
print(row)
以下是我的 CSV 数据当前的格式(它只是被抓取并放入 CSV 文件):
鉴于此,我是否能够使用以下方法提取表行的值:
Mkt_cap=row[0]
EV = row[1]
然后我会编写一个插入命令并提交以将数据放入数据库。
还是我需要重新格式化我的 CSV 数据?
解决方案
这有点棘手,因为 CSV 中的数据是转置的。通常你会让每一行定义一年,列是会计期间、资本化、ev等。
你可以自己转置数据,但我会使用pandas。假设您的 csv 根据您的屏幕截图看起来是这样的:
Valuation,,,,,,
Fiscal Period: December,2017,2018,2019,2020,2021,2022
Capitalization,270120,215323,248119,-,-
Entreprise Value (EV),262351,208330,232655,204634,200604,196917
P/E ratio,25.7x,16.0x,19.1x,67.1x,19.6x,15.3x
Yield,0.94%,1.83%,1.59%,0.83%,1.54%,1.74%
这里有一些示例代码:
import pandas as pd
df = pd.read_csv('data.csv', headers=None, na_values='-')
# first row does not mean much so let us remove it
df = df.drop(df.index[0])
# transpose the data to get it back in shape
df = df.transpose()
# use first row as header
df.columns = df.iloc[0]
# remove first row from data
df = df.drop(df.index[0])
# iterate over each row
for _, row in df.iterrows():
print(f'cap: {row["Capitalization"]}\t'
f'EV: {row["Entreprise Value (EV)"]}\t'
f'PE: {row["P/E ratio"]}\t'
f'Yield: {row["Yield"]}')
结果:
cap: 270120 EV: 262351 PE: 25.7x Yield: 0.94%
cap: 215323 EV: 208330 PE: 16.0x Yield: 1.83%
cap: 248119 EV: 232655 PE: 19.1x Yield: 1.59%
cap: 237119 EV: 204634 PE: 67.1x Yield: 0.83%
cap: nan EV: 200604 PE: 19.6x Yield: 1.54%
cap: nan EV: 196917 PE: 15.3x Yield: 1.74%
推荐阅读
- nativescript - 在 NativeScript 中创建可缩放标签
- python - awk:致命:无法打开文件“文件”进行读取(权限被拒绝)
- sql - 列中的逗号分隔天名称
- if-statement - 通过改变工作日期来消除周末日期
- java - 为什么hadoop不能加载类?
- linux - 重新安装linux后如何恢复已删除的文件
- react-native - 我想在一个特殊孩子的新闻发布会上改变一个以上孩子的背景
- rest - Spring REST Docs - 由于输入结束,没有要映射的内容
- php - 安装模块后 composer.json 文件出错
- c# - 如何让我的 TwoSum 方法处理无序的数字?