我正在使用Python3.5,我正在使用pandas.我已经从yahoo finance加载了库存数据并将文件保存到csv.我的DataFrames从csv加载这些数据.这是我的DataFrame的十行csv文件的副本
Date Open High Low Close Volume Adj Close
1990-04-12 26.875000 26.875000 26.625 26.625 6100 250.576036
1990-04-16 26.500000 26.750000 26.375 26.750 500 251.752449
1990-04-17 26.750000 26.875000 26.750 26.875 2300 252.928863
1990-04-18 26.875000 26.875000 26.500 26.625 3500 250.576036
1990-04-19 26.500000 26.750000 26.500 26.750 700 251.752449
1990-04-20 26.750000 26.875000 26.750 26.875 2100 252.928863
1990-04-23 26.875000 26.875000 26.750 26.875 700 252.928863
1990-04-24 27.000000 27.000000 26.000 26.000 2400 244.693970
1990-04-25 25.250000 25.250000 24.875 25.125 9300 236.459076
1990-04-26 25.000000 25.250000 24.750 25.000 1200 235.282663 …Run Code Online (Sandbox Code Playgroud) 我正在写一个函数,可以向我的数据库添加一个新表。我遇到的问题是表已经存在时出现错误消息:
pymysql.err.InternalError: (1050, "Table 'doesthiswork' already exists")
Run Code Online (Sandbox Code Playgroud)
因此,我在代码中添加了一个except,该代码可以正常工作,但它排除了所有内部错误。除了我假定的特定错误不是1050而不是内部错误之外,如何获取代码?
import pymysql
def CreateTable(Host,User,Password,DataBase,TableName):
try:
conn = pymysql.connect(
host = Host,
user = User,
password= Password,
db = DataBase
)
a = conn.cursor()
tblName = TableName
sql = 'CREATE TABLE'+" "+ tblName + '(try varchar(128));'
a.execute(sql)
except pymysql.err.InternalError:
print (tblName + " " + 'already exist')
Run Code Online (Sandbox Code Playgroud)
上面的代码可以工作,但是如前所述,如果出现了其他类型的内部错误,则仅会因为表已经存在而不是实际错误本身而已。
我正在构建功能来帮助我从Web加载数据。就加载数据而言,我试图解决的问题是列名称因来源而异。例如,Yahoo Finance数据列标题看起来像“打开”,“高”,“低”,“关闭”,“交易量”,“调整关闭”。Quandl.com将具有包含DATE,VALUE,日期,值等的数据集。所有大写和小写字母将丢弃所有内容以及Value和Adj。封闭在很大程度上意味着相同的东西。我想将名称不同但含义相同的列关联到一个值。例如调整。收盘价和价值均= AC;打开,打开,然后全部打开=O。
因此,我有一个Csv文件(“ Functions // ColumnNameChanges.txt”),该文件存储dict()键和列名的值。
Date,D
Open,O
High,H
Run Code Online (Sandbox Code Playgroud)
然后我写了这个函数来填充我的字典
def DictKeyValuesFromText ():
Dictionary = {}
TextFileName = "Functions//ColumnNameChanges.txt"
with open(TextFileName,'r') as f:
for line in f:
x = line.find(",")
y = line.find("/")
k = line[0:x]
v = line[x+1:y]
Dictionary[k] = v
return Dictionary
Run Code Online (Sandbox Code Playgroud)
这是print(DictKeyValuesFromText())的输出
{'': '', 'Date': 'D', 'High': 'H', 'Open': 'O'}
Run Code Online (Sandbox Code Playgroud)
下一个功能是我的问题所在
def ChangeColumnNames(DataFrameFileLocation):
x = DictKeyValuesFromText()
df = pd.read_csv(DataFrameFileLocation)
for y in df.columns:
if y not in x.keys():
i = input("The column " + y + …Run Code Online (Sandbox Code Playgroud) 我正在使用python 3.5并导入了numpy和pandas库.我创建了一个名为df的DataFrame,其索引从零开始,有两列; 变化百分比(PofChg)和向上,向下或平坦(U_D_F).
对于U_D_F列,我想根据PofChg列填充"Up","Down","Flat"字样.Up表示大于零,Down表示小于零,Flat表示等于零.
np.where函数似乎运行良好,除了两件事,(1)当PofChg列中的数字为"零"时,为什么它在U_D_F列中显示"Down"(2)如何制作np.where函数接受更多参数,即不是说 - 如果df.PofChg> 0,如果true显示"Up"或者如果false显示"Down",我想将其更改为 - 如果df.PofChg> 0,如果是真显示"向上"或如果错误显示"向下",但如果它等于零则显示"平坦"
这是我打印df时的当前输出
PofChg U_D_F
0 -1 Down
1 0 Down
2 1 Up
3 -2 Down
4 0 Down
5 5 Up
6 3 Up
7 -6 Down
Press any key to continue . . .
Run Code Online (Sandbox Code Playgroud)
这是我的代码
import pandas as pd
import numpy as np
df = pd.DataFrame({'PofChg':[-1,0,1,-2,0,5,3,-6]})
df['U_D_F'] = np.where(df.PofChg > 0 , 'Up','Down');df
print(df)
Run Code Online (Sandbox Code Playgroud) 我正在使用python从quandl.com下载数据,并且今天已经达到50次下载的极限。具有帐户的用户可以超过此限制,我已经设置了帐户。错误消息说我需要在请求中放入我的api密钥,但据我所知它没有说如何?
这是错误消息
quandl.errors.quandl_error.LimitExceededError: (Status 429) (Quandl Error QELx01) You have exceeded the anonymous user limit of 50 calls per day. To make more calls today, please register for a free Quandl account and then include your API key with your requests.
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的代码,除了请求限制外
import quandl
import pandas as pd
from datetime import datetime
import pandas.io.data as web
symbols = ['BOE/XUDLTWD','BOE/XUDLCDS','tvix']
pnls = {}
for i in symbols:
a = '/' in i
if a == True:
data = quandl.get(i )
t …Run Code Online (Sandbox Code Playgroud) 我目前正在寻找一种方法来加载雅虎金融的多年股价历史.我将有100多个自动收报机符号,我将从1985年下载数据到当前日期.我想将Open,High,Low,Close,Adj Close,Volume加载到单个DataFrames(pandas)中,并将数据框的名称命名为当前股票代码.
我的问题是我的变量自动收报机不起作用,即使它确实有效,我怎么能存储这些数据?
import csv
import pandas as pd
import pandas_datareader.data as web
import datetime
#This represents the start and end date for the data
start = datetime.datetime(1985, 1, 1)
end = datetime.datetime(2016, 1, 27)
ticker = ['aapl','tvix','ugaz']
i= 0
while i < len(ticker):
f = web.DataReader(ticker, 'yahoo', start, end)
print(f)
i+=1
Run Code Online (Sandbox Code Playgroud)
我希望能够永久存储所有这些数据,例如,如果我今天为100个股票代码加载30年的价格历史,那么明天我只需要追加一天的数据而不是全部30年.数据帧似乎是组织数据的最有效方式,但我不太确定,但我想做机器学习和数据分析.