teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

修正

2019/02/01 08:30

投稿

8524ba23
8524ba23

スコア38352

answer CHANGED
@@ -19,13 +19,14 @@
19
19
  codes = [111,222,333]
20
20
  dfs = [get_price(code) for code in codes]
21
21
  prices = pd.concat(dfs, axis=1)
22
+ prices.columns = map(str,codes) # 列名を変更
22
23
  print(prices)
23
24
  """
24
- price price price
25
+ 111 222 333
25
26
  date
26
- 2019-01-01 10.0 NaN NaN
27
+ 2019-01-01 10.0 NaN NaN
27
- 2019-01-02 NaN 20.0 NaN
28
+ 2019-01-02 NaN 20.0 NaN
28
- 2019-01-03 NaN NaN 30.0
29
+ 2019-01-03 NaN NaN 30.0
29
30
  """
30
31
  ```
31
32
 

1

ついでに

2019/02/01 08:30

投稿

8524ba23
8524ba23

スコア38352

answer CHANGED
@@ -27,4 +27,30 @@
27
27
  2019-01-02 NaN 20.0 NaN
28
28
  2019-01-03 NaN NaN 30.0
29
29
  """
30
+ ```
31
+
32
+ ### ついでに
33
+ ふつうに複数の`code`で絞った結果を返したい場合は以下のように書けます。
34
+ ```Python
35
+ import sqlite3
36
+ import pandas as pd
37
+
38
+ def get_prices(codes):
39
+ con = sqlite3.connect('test.db')
40
+ where = ','.join(map(str,codes)) # codeを直埋め
41
+ sql = 'SELECT date, price FROM prices WHERE code in ({}) ORDER BY date'.format(where)
42
+ print(sql) # SELECT date, price FROM prices WHERE code in (111,222,333) ORDER BY date
43
+ return pd.read_sql(sql, con,
44
+ parse_dates=('date',),
45
+ index_col='date')
46
+
47
+ prices = get_prices([111,222,333])
48
+ print(prices)
49
+ """
50
+ price
51
+ date
52
+ 2019-01-01 10
53
+ 2019-01-02 20
54
+ 2019-01-03 30
55
+ """
30
56
  ```