![](/img/trans.png)
[英]Print the the oldest and newest date from a csv column - Sort csv by date
[英]Add new column based on a list and sort date by newest
我是使用python編寫代碼的初學者。
我使用Pandas和他的DataReader編寫了這個簡單的腳本來從yahoo finance檢索多個股票結果:
import pandas as pd
from pandas.io.data import DataReader
from pandas import DataFrame
symbols_list = ['AAPL', 'TSLA', 'YHOO','GOOG', 'MSFT','GILD']
for ticker in symbols_list:
r = DataReader(ticker, "yahoo", '2015-01-20')
cell= r[['Open','High','Low','Adj Close','Volume']]
print cell
使用此代碼,我獲得了我在“cell = r [[....”中指定的日期+其他列的價格股票,如下所示:
Open High Low Adj Close Volume
Date
2015-01-20 107.84 108.97 106.50 108.72 49899900
2015-01-21 108.95 111.06 108.27 109.55 48575900
2015-01-22 110.26 112.47 109.72 112.40 53796400
2015-01-23 112.30 113.75 111.53 112.98 46464800
2015-01-26 113.74 114.36 112.80 113.10 55375900
Open High Low Adj Close Volume
Date
2015-01-20 193.87 194.12 187.04 191.93 4489400
2015-01-21 189.55 198.68 189.51 196.57 4144000
2015-01-22 197.00 203.24 195.20 201.62 4094100
2015-01-23 200.29 203.50 198.33 201.29 3438600
2015-01-26 201.83 208.62 201.05 206.55 3224500
我的問題是:如何在列中包含我在symbol_list中指定的代碼? 最后一件事:我怎樣才能顛倒日期的順序? 我想讓它顯示最新的第一個(在我的例子中為2015-01-26)。 下面我將向您展示我想要獲取的內容的示例(作為第一列的股票代號和倒置的日期順序)
TSLA 2015-01-26 201.83 208.62 201.05 206.55 3224500
TSLA 2015-01-23 200.29 203.50 198.33 201.29 3438600
TSLA 2015-01-22 197.00 203.24 195.20 201.62 4094100
TSLA,2015-01-21 189.55 198.68 189.51 196.57 4144000
TSLA 2015-01-20 193.87 194.12 187.04 191.93 4489400
AAPL 2015-01-26 113.74 114.36 112.80 113.10 55375900
AAPL 2015-01-23 112.30 113.75 111.53 112.98 46464800
AAPL 2015-01-22 110.26 112.47 109.72 112.40 53796400
AAPL 2015-01-21 108.95 111.06 108.27 109.55 48575900
AAPL 2015-01-20 107.84 108.97 106.50 108.72 49899900
我嘗試了一些在論壇中創建的東西,但沒有一個給了我任何結果。 謝謝大家的考慮,希望有人能幫我解決這兩個問題。
更新代碼已完成
在@EdChum的寶貴幫助下,我已經完成了我的代碼,我在這篇文章中的請求已經完全滿意了(再次感謝大家的幫助)。 獲取多個股票價格,一組列+股票代碼,以及反轉日期(和代碼)順序的最終代碼如下所示:
import datetime
import pandas as pd
from pandas import DataFrame
from pandas.io.data import DataReader
symbols_list = ['AAPL', 'TSLA', 'YHOO','GOOG', 'MSFT','ALTR','WDC','KLAC']
symbols=[]
for ticker in symbols_list:
r = DataReader(ticker, "yahoo",
start=datetime.datetime(2014, 12, 30))
# add a symbol column
r['Symbol'] = ticker
symbols.append(r)
# concatenate all the dfs
df = pd.concat(symbols)
#define cell with the columns that i need
cell= df[['Symbol','Open','High','Low','Adj Close','Volume']]
#changing sort of Symbol (ascending) and Date(descending) setting Symbol as first column and changing date format
cell.reset_index().sort(['Symbol', 'Date'], ascending=[1,0]).set_index('Symbol').to_csv('stock.csv', date_format='%d/%m/%Y')
希望這段代碼能夠幫助其他用戶。
我想我理解你想要的東西,我會將每個df附加到一個列表並使用concat
來制作一個df,對於每個df,我們可以為每個符號添加一個新列:
In [54]:
from pandas.io.data import DataReader
symbols_list = ['AAPL', 'TSLA', 'YHOO','GOOG', 'MSFT','GILD']
symbols=[]
for ticker in symbols_list:
r = DataReader(ticker, "yahoo", '2015-01-20')
# add a symbol column
r['Symbol'] = ticker
symbols.append(r)
# concatenate all the dfs
df = pd.concat(symbols)
df.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 30 entries, 2015-01-20 00:00:00 to 2015-01-26 00:00:00
Data columns (total 7 columns):
Open 30 non-null float64
High 30 non-null float64
Low 30 non-null float64
Close 30 non-null float64
Volume 30 non-null int64
Adj Close 30 non-null float64
Symbol 30 non-null object
dtypes: float64(5), int64(1), object(1)
memory usage: 1.9+ KB
In [55]:
df
Out[55]:
Open High Low Close Volume Adj Close Symbol
Date
2015-01-20 107.84 108.97 106.50 108.72 49899900 108.72 AAPL
2015-01-21 108.95 111.06 108.27 109.55 48575900 109.55 AAPL
2015-01-22 110.26 112.47 109.72 112.40 53796400 112.40 AAPL
2015-01-23 112.30 113.75 111.53 112.98 46464800 112.98 AAPL
2015-01-26 113.74 114.36 112.80 113.10 55375900 113.10 AAPL
2015-01-20 193.87 194.12 187.04 191.93 4503200 191.93 TSLA
2015-01-21 189.55 198.68 189.51 196.57 4153000 196.57 TSLA
2015-01-22 197.00 203.24 195.20 201.62 4094100 201.62 TSLA
2015-01-23 200.29 203.50 198.33 201.29 3438600 201.29 TSLA
2015-01-26 201.83 208.62 201.05 206.55 3224500 206.55 TSLA
2015-01-20 46.79 47.89 46.77 47.63 15845900 47.63 YHOO
2015-01-21 47.60 48.38 47.32 48.18 16305100 48.18 YHOO
2015-01-22 48.43 49.08 48.01 48.89 12647400 48.89 YHOO
2015-01-23 48.74 49.23 48.63 48.95 14206100 48.95 YHOO
2015-01-26 49.57 49.79 49.07 49.44 18928700 49.44 YHOO
2015-01-20 511.00 512.50 506.02 506.90 2221800 506.90 GOOG
2015-01-21 507.25 519.28 506.20 518.04 2262500 518.04 GOOG
2015-01-22 521.48 536.33 519.70 534.39 2653600 534.39 GOOG
2015-01-23 535.59 542.17 533.00 539.95 2266800 539.95 GOOG
2015-01-26 538.53 539.00 529.67 535.21 1532400 535.21 GOOG
2015-01-20 46.30 46.65 45.57 46.39 36161900 46.39 MSFT
2015-01-21 45.94 46.14 45.48 45.92 39081100 45.92 MSFT
2015-01-22 46.38 47.14 46.08 47.13 35898000 47.13 MSFT
2015-01-23 47.36 47.39 46.80 47.18 26211600 47.18 MSFT
2015-01-26 47.00 47.13 46.24 47.01 39577800 47.01 MSFT
2015-01-20 101.14 104.05 100.15 103.78 18838100 103.78 GILD
2015-01-21 103.04 105.07 102.57 103.58 12312500 103.58 GILD
2015-01-22 104.14 105.18 101.56 105.14 12963100 105.14 GILD
2015-01-23 104.40 106.11 103.80 105.54 9566700 105.54 GILD
2015-01-26 104.87 107.77 104.87 107.11 10254600 107.11 GILD
求助調用sort
並傳遞ascending=False
:
In [56]:
df.sort(ascending=False)
Out[56]:
Open High Low Close Volume Adj Close Symbol
Date
2015-01-26 104.87 107.77 104.87 107.11 10254600 107.11 GILD
2015-01-26 201.83 208.62 201.05 206.55 3224500 206.55 TSLA
2015-01-26 538.53 539.00 529.67 535.21 1532400 535.21 GOOG
2015-01-26 49.57 49.79 49.07 49.44 18928700 49.44 YHOO
2015-01-26 47.00 47.13 46.24 47.01 39577800 47.01 MSFT
2015-01-26 113.74 114.36 112.80 113.10 55375900 113.10 AAPL
2015-01-23 104.40 106.11 103.80 105.54 9566700 105.54 GILD
2015-01-23 47.36 47.39 46.80 47.18 26211600 47.18 MSFT
2015-01-23 200.29 203.50 198.33 201.29 3438600 201.29 TSLA
2015-01-23 535.59 542.17 533.00 539.95 2266800 539.95 GOOG
2015-01-23 48.74 49.23 48.63 48.95 14206100 48.95 YHOO
2015-01-23 112.30 113.75 111.53 112.98 46464800 112.98 AAPL
2015-01-22 521.48 536.33 519.70 534.39 2653600 534.39 GOOG
2015-01-22 46.38 47.14 46.08 47.13 35898000 47.13 MSFT
2015-01-22 110.26 112.47 109.72 112.40 53796400 112.40 AAPL
2015-01-22 48.43 49.08 48.01 48.89 12647400 48.89 YHOO
2015-01-22 104.14 105.18 101.56 105.14 12963100 105.14 GILD
2015-01-22 197.00 203.24 195.20 201.62 4094100 201.62 TSLA
2015-01-21 507.25 519.28 506.20 518.04 2262500 518.04 GOOG
2015-01-21 189.55 198.68 189.51 196.57 4153000 196.57 TSLA
2015-01-21 47.60 48.38 47.32 48.18 16305100 48.18 YHOO
2015-01-21 103.04 105.07 102.57 103.58 12312500 103.58 GILD
2015-01-21 45.94 46.14 45.48 45.92 39081100 45.92 MSFT
2015-01-21 108.95 111.06 108.27 109.55 48575900 109.55 AAPL
2015-01-20 101.14 104.05 100.15 103.78 18838100 103.78 GILD
2015-01-20 107.84 108.97 106.50 108.72 49899900 108.72 AAPL
2015-01-20 46.30 46.65 45.57 46.39 36161900 46.39 MSFT
2015-01-20 46.79 47.89 46.77 47.63 15845900 47.63 YHOO
2015-01-20 193.87 194.12 187.04 191.93 4503200 191.93 TSLA
2015-01-20 511.00 512.50 506.02 506.90 2221800 506.90 GOOG
更新
如果要保留股票代碼分組,然后按日期排序,則需要以下內容。 在這里,我必須重置索引,以便'Date'再次成為常規列,然后我傳遞一個列表,它將按順序處理,最后我必須再次設置索引:
In [44]:
df.reset_index().sort(['Symbol', 'Date'], ascending=False).set_index('Date')
Out[44]:
Open High Low Close Volume Adj Close Symbol
Date
2015-01-27 49.14 49.28 47.66 47.99 44813600 47.99 YHOO
2015-01-26 49.57 49.79 49.07 49.44 18928700 49.44 YHOO
2015-01-23 48.74 49.23 48.63 48.95 14206100 48.95 YHOO
2015-01-22 48.43 49.08 48.01 48.89 12647400 48.89 YHOO
2015-01-21 47.60 48.38 47.32 48.18 16305100 48.18 YHOO
2015-01-20 46.79 47.89 46.77 47.63 15845900 47.63 YHOO
2015-01-27 204.42 208.03 203.30 205.98 2777700 205.98 TSLA
2015-01-26 201.83 208.62 201.05 206.55 3224500 206.55 TSLA
2015-01-23 200.29 203.50 198.33 201.29 3438600 201.29 TSLA
2015-01-22 197.00 203.24 195.20 201.62 4094100 201.62 TSLA
2015-01-21 189.55 198.68 189.51 196.57 4153000 196.57 TSLA
2015-01-20 193.87 194.12 187.04 191.93 4503200 191.93 TSLA
2015-01-27 42.95 43.20 42.11 42.66 169112700 42.66 MSFT
2015-01-26 47.00 47.13 46.24 47.01 42525500 47.01 MSFT
2015-01-23 47.36 47.39 46.80 47.18 26211600 47.18 MSFT
2015-01-22 46.38 47.14 46.08 47.13 35898000 47.13 MSFT
2015-01-21 45.94 46.14 45.48 45.92 39081100 45.92 MSFT
2015-01-20 46.30 46.65 45.57 46.39 36161900 46.39 MSFT
2015-01-27 529.97 530.70 518.19 518.63 1897300 518.63 GOOG
2015-01-26 538.53 539.00 529.67 535.21 1532400 535.21 GOOG
2015-01-23 535.59 542.17 533.00 539.95 2266800 539.95 GOOG
2015-01-22 521.48 536.33 519.70 534.39 2653600 534.39 GOOG
2015-01-21 507.25 519.28 506.20 518.04 2262500 518.04 GOOG
2015-01-20 511.00 512.50 506.02 506.90 2221800 506.90 GOOG
2015-01-27 105.94 107.02 104.86 105.03 10334500 105.03 GILD
2015-01-26 104.87 107.77 104.87 107.11 10254600 107.11 GILD
2015-01-23 104.40 106.11 103.80 105.54 9566700 105.54 GILD
2015-01-22 104.14 105.18 101.56 105.14 12963100 105.14 GILD
2015-01-21 103.04 105.07 102.57 103.58 12312500 103.58 GILD
2015-01-20 101.14 104.05 100.15 103.78 18838100 103.78 GILD
2015-01-27 112.42 112.48 109.03 109.14 91929200 109.14 AAPL
2015-01-26 113.74 114.36 112.80 113.10 55615000 113.10 AAPL
2015-01-23 112.30 113.75 111.53 112.98 46464800 112.98 AAPL
2015-01-22 110.26 112.47 109.72 112.40 53796400 112.40 AAPL
2015-01-21 108.95 111.06 108.27 109.55 48575900 109.55 AAPL
2015-01-20 107.84 108.97 106.50 108.72 49899900 108.72 AAPL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.