0

Yahoo Finance から過去の株価情報を開いたときに、csv ファイルをダウンロードして操作したいと考えています。

csv ファイルがどのように見えるかを簡単に示します。

Date,Open,High,Low,Close,Volume,Adj Close
2012-11-30,691.31,699.22,685.69,698.37,3163600,698.37
2012-11-29,687.78,693.90,682.00,691.89,2776500,691.89
2012-11-28,668.01,684.91,663.89,683.67,3042000,683.67

「open、High、Low、Close、Volume、Adj」という単語とその下のデータを消去するコードを作成し、2 つの新しい列を追加して、次のようにします。

Date        Close    [Insert new column here] [Another column]
2012-11-30  698.37      ---some data----       ---some data----
2012-11-29  691.89      ---some data----       ---some data----
2012-11-28  683.67      ---some data----       ---some data----

私は Python の初心者なので、このコードを書くのに少し苦労しています。誰かが私を助けてくれれば、とても感謝しています。

これまでのところ、これは私が持っているものですが、私が望むように明確に機能しているわけではありません.

def _download_url(url):
    response = None
    try:
        response = urllib.request.urlopen(url)
        content_bytes=response.read()
        content_string=content_bytes.decode(encoding='utf-8')
        data = io.StringIO(content_string)
        mycsv=csv.reader(data)
        for row in mycsv:
            if row:
                print(row[0],row[6])

このコードは次のように表示されます (簡単に説明します)。

Date Adj Close
2012-11-30 698.37
2012-11-29 691.89
2012-11-28 683.67
2012-11-27 670.71

それは私が望むものですが、「Adj」を消去し、さらに2つの新しい列を追加したい. ありがとう!

4

3 に答える 3

0

あなたがまだあなたのデザインに夢中になっていないのなら、私はパンダを見ることをお勧めします。これにより、このようなものが他の方法よりもはるかに簡単になります。データの取得:

>>> from pandas.io.data import DataReader
>>> apple = DataReader("AAPL",  "yahoo")
>>> apple
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 786 entries, 2010-01-04 00:00:00 to 2013-02-15 00:00:00
Data columns:
Open         786  non-null values
High         786  non-null values
Low          786  non-null values
Close        786  non-null values
Volume       786  non-null values
Adj Close    786  non-null values
dtypes: float64(5), int64(1)
>>> apple[:5]
              Open    High     Low   Close    Volume  Adj Close
Date                                                           
2010-01-04  213.43  214.50  212.38  214.01  17633200     210.90
2010-01-05  214.60  215.59  213.25  214.38  21496600     211.26
2010-01-06  214.38  215.23  210.75  210.97  19720000     207.90
2010-01-07  211.75  212.00  209.05  210.58  17040400     207.52
2010-01-08  210.30  212.00  209.06  211.98  15986100     208.90

新しい列の追加:

>>> apple["new_column"] = apple["Open"]/apple["Volume"]**0.3 + 5
>>> apple[:5]
              Open    High     Low   Close    Volume  Adj Close  new_column
Date                                                                       
2010-01-04  213.43  214.50  212.38  214.01  17633200     210.90    6.430066
2010-01-05  214.60  215.59  213.25  214.38  21496600     211.26    6.354936
2010-01-06  214.38  215.23  210.75  210.97  19720000     207.90    6.389032
2010-01-07  211.75  212.00  209.05  210.58  17040400     207.52    6.433440
2010-01-08  210.30  212.00  209.06  211.98  15986100     208.90    6.451164

必要な列のみを選択します。

>>> new = apple[["Close", "new_column"]]
>>> new[:5]
             Close  new_column
Date                          
2010-01-04  214.01    6.430066
2010-01-05  214.38    6.354936
2010-01-06  210.97    6.389032
2010-01-07  210.58    6.433440
2010-01-08  211.98    6.451164

など。

于 2013-02-18T19:27:40.040 に答える
0

を作成する前に、 'Adj' を削除するようdataに調整します。content_string

content_string=content_bytes.decode(encoding='utf-8')
content_string = content_string.replace('Adj ', '')
data = io.StringIO(content_string)

列の追加に関しては、printステートメントで行うかどうかはあなた次第です。

于 2013-02-16T06:39:13.547 に答える
0

私はたまたま のDictReaderクラスの大ファンですcsv。なぜなら、s の解析から当て推量がすべてなくなるからですcsv(インデックスはもう必要ありません!):

mycsv = csv.DictReader(data)
print('{:<11} {:<8} {:<12} {:<12}'.format('Date', 'Close', 'Col1', 'Col2'))
for row in mycsv:
    print('{:<11} {:<8} {:<12} {:<12}'.format(row['Date'], row['Adj Close'], '123', '456')

1 つprint目はヘッダー行を出力し、2つ目は各行を出力します ( CSV のヘッダー行を消費することにprint注意してください)。DictReaderは、指定されたサイズの{:<11} {:<8} {:<12} {:<12}適切な固定列でデータをフォーマットします。

于 2013-02-16T06:46:32.820 に答える