如何使用 Python 中的 pandas 重命名 DataFrame 中的列
How to rename columns in DataFrame with pandas in Python
我有五个从 Yahoo! 导入的股票投资组合财务,需要创建一个包含所有股票 2016 年收盘价的 DataFrame。但是,我正在努力用相应的股票名称标记列。
import pandas.io.data as web
import pandas_datareader.data as web
import pandas as pd
from pandas import Series, DataFrame
import numpy as np
import datetime
start = datetime.datetime(2016, 1, 1)
end = datetime.datetime(2016, 12, 31)
NFLX = web.DataReader("NFLX", 'yahoo', start, end)
AAPL = web.DataReader("AAPL", 'yahoo', start, end)
GOOGL = web.DataReader("GOOGL", 'yahoo', start, end)
FB = web.DataReader("FB", 'yahoo', start, end)
TSLA = web.DataReader("TSLA", 'yahoo', start, end)
df_NFLX = pd.DataFrame(NFLX['Close'])
df_AAPL = pd.DataFrame(AAPL['Close'])
df_GOOGL = pd.DataFrame(GOOGL['Close'])
df_FB = pd.DataFrame(FB['Close'])
df_TSLA = pd.DataFrame(TSLA['Close'])
frames = [df_NFLX, df_AAPL, df_GOOGL, df_FB, df_TSLA]
result = pd.concat(frames, axis = 1)
result = result.rename(columns = {'Two':'N'})
result
我的代码产生了这个 - 我想相应地为每一列命名。
Out[15]:
Close Close Close Close Close
Date
2016-01-04 109.959999 105.349998 759.440002 102.220001 223.410004
2016-01-05 107.660004 102.709999 761.530029 102.730003 223.429993
2016-01-06 117.680000 100.699997 759.330017 102.970001 219.039993
2016-01-07 114.559998 96.449997 741.000000 97.919998 215.649994
2016-01-08 111.389999 96.959999 730.909973 97.330002 211.000000
2016-01-11 114.970001 98.529999 733.070007 97.510002 207.850006
2016-01-12 116.580002 99.959999 745.340027 99.370003 209.970001
要重命名构造的 table 中的列,您可以更改为:
df_NFLX = pd.DataFrame(NFLX['Close'])
对此:
df_NFLX = pd.DataFrame(NFLX['Close']).rename(columns={'Close': 'NFLX'})
修补您编写的代码的一种简单方法是将名称列表分配给 df.columns
。
df.columns = ['NFLX', 'AAPL', 'GOOGL', 'FB', 'TSLA']
但是,有一些方法可以使大块代码更加简洁,这也允许您将股票名称明确指定为列名称。我会回到开头(在定义 start
和 end
之后)首先创建一个要获取的股票行情列表。
start = datetime.datetime(2016, 1, 1)
end = datetime.datetime(2016, 12, 31)
tickers = ['NFLX', 'AAPL', 'GOOGL', 'FB', 'TSLA']
然后你可以在某种循环中构建所有数据帧。如果您只需要 Close
列,您可以立即提取该列,实际上您可以从所有这些列中创建一个 dict
,然后直接从该 [=] 构造一个 DataFrame
19=].
result = DataFrame({t: web.DataReader(t, 'yahoo', start, end)['Close']
for t in tickers})
另一种方法是将所有股票数据放在 Panel
中,如果您可能想使用其他列,这会很有用。
p = pd.Panel({t: web.DataReader(t, 'yahoo', start, end) for t in tickers})
然后你可以用
提取Close
个数字
result = p[:,:,'Close']
您会注意到它自动具有正确的列标签。
我有五个从 Yahoo! 导入的股票投资组合财务,需要创建一个包含所有股票 2016 年收盘价的 DataFrame。但是,我正在努力用相应的股票名称标记列。
import pandas.io.data as web
import pandas_datareader.data as web
import pandas as pd
from pandas import Series, DataFrame
import numpy as np
import datetime
start = datetime.datetime(2016, 1, 1)
end = datetime.datetime(2016, 12, 31)
NFLX = web.DataReader("NFLX", 'yahoo', start, end)
AAPL = web.DataReader("AAPL", 'yahoo', start, end)
GOOGL = web.DataReader("GOOGL", 'yahoo', start, end)
FB = web.DataReader("FB", 'yahoo', start, end)
TSLA = web.DataReader("TSLA", 'yahoo', start, end)
df_NFLX = pd.DataFrame(NFLX['Close'])
df_AAPL = pd.DataFrame(AAPL['Close'])
df_GOOGL = pd.DataFrame(GOOGL['Close'])
df_FB = pd.DataFrame(FB['Close'])
df_TSLA = pd.DataFrame(TSLA['Close'])
frames = [df_NFLX, df_AAPL, df_GOOGL, df_FB, df_TSLA]
result = pd.concat(frames, axis = 1)
result = result.rename(columns = {'Two':'N'})
result
我的代码产生了这个 - 我想相应地为每一列命名。
Out[15]:
Close Close Close Close Close
Date
2016-01-04 109.959999 105.349998 759.440002 102.220001 223.410004
2016-01-05 107.660004 102.709999 761.530029 102.730003 223.429993
2016-01-06 117.680000 100.699997 759.330017 102.970001 219.039993
2016-01-07 114.559998 96.449997 741.000000 97.919998 215.649994
2016-01-08 111.389999 96.959999 730.909973 97.330002 211.000000
2016-01-11 114.970001 98.529999 733.070007 97.510002 207.850006
2016-01-12 116.580002 99.959999 745.340027 99.370003 209.970001
要重命名构造的 table 中的列,您可以更改为:
df_NFLX = pd.DataFrame(NFLX['Close'])
对此:
df_NFLX = pd.DataFrame(NFLX['Close']).rename(columns={'Close': 'NFLX'})
修补您编写的代码的一种简单方法是将名称列表分配给 df.columns
。
df.columns = ['NFLX', 'AAPL', 'GOOGL', 'FB', 'TSLA']
但是,有一些方法可以使大块代码更加简洁,这也允许您将股票名称明确指定为列名称。我会回到开头(在定义 start
和 end
之后)首先创建一个要获取的股票行情列表。
start = datetime.datetime(2016, 1, 1)
end = datetime.datetime(2016, 12, 31)
tickers = ['NFLX', 'AAPL', 'GOOGL', 'FB', 'TSLA']
然后你可以在某种循环中构建所有数据帧。如果您只需要 Close
列,您可以立即提取该列,实际上您可以从所有这些列中创建一个 dict
,然后直接从该 [=] 构造一个 DataFrame
19=].
result = DataFrame({t: web.DataReader(t, 'yahoo', start, end)['Close']
for t in tickers})
另一种方法是将所有股票数据放在 Panel
中,如果您可能想使用其他列,这会很有用。
p = pd.Panel({t: web.DataReader(t, 'yahoo', start, end) for t in tickers})
然后你可以用
提取Close
个数字
result = p[:,:,'Close']
您会注意到它自动具有正确的列标签。