小编Zac*_*ack的帖子

如何从pandas数据帧中的当前行中减去前一行并将其应用于每一行; 没有使用循环?

我正在使用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)

python indexing numpy dataframe pandas

13
推荐指数
2
解决办法
2万
查看次数

除了特定种类的pymysql.err.InternalErrors之外,我如何才能排除呢?

我正在写一个函数,可以向我的数据库添加一个新表。我遇到的问题是表已经存在时出现错误消息:

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)

上面的代码可以工作,但是如前所述,如果出现了其他类型的内部错误,则仅会因为表已经存在而不是实际错误本身而已。

python error-handling

5
推荐指数
1
解决办法
2851
查看次数

如何使用字典键和值重命名Pandas DataFrame中的列?

我正在构建功能来帮助我从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 dictionary dataframe pandas

5
推荐指数
2
解决办法
5693
查看次数

如何让np.where接受更多参数,因此它将过滤>,<和=; 不只是>和<?

我正在使用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 numpy where dataframe pandas

3
推荐指数
2
解决办法
103
查看次数

正在从quandl.com下载数据,并想知道如何在请求中包含API密钥?

我正在使用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)

python api-key quandl

2
推荐指数
1
解决办法
2723
查看次数

使用python 3.5从yahoo finance下载股票价格历史

我目前正在寻找一种方法来加载雅虎金融的多年股价历史.我将有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年.数据帧似乎是组织数据的最有效方式,但我不太确定,但我想做机器学习和数据分析.

python

1
推荐指数
1
解决办法
3551
查看次数