资料来源
数据表的创建
Series
import pandas as pd
s = pd.Series([27.2, 27.65, 27.70, 28])
# s.values
# s.index
dates = pd.date_range('20191001', periods=4)
print(dates)
s2 = pd.Series([27.2, 27.65, 27.70, 28], index=dates)
s2.name = "海底捞股价"
s2
DatetimeIndex(['2019-10-01', '2019-10-02', '2019-10-03', '2019-10-04'], dtype='datetime64[ns]', freq='D')
2019-10-01 27.20
2019-10-02 27.65
2019-10-03 27.70
2019-10-04 28.00
Freq: D, Name: 海底捞股价, dtype: float64
import pandas as pd
import numpy as np
s = pd.Series(np.array([27.2, 27.65, 27.70, 28, np.nan]))
print( 'The length is', len(s) )
print( 'The shape is', s.shape )
print( 'The count is', s.count() )
print(s.unique())
print("-------")
print(s.value_counts())
The length is 5
The shape is (5,)
The count is 4
[27.2 27.65 27.7 28. nan]
-------
27.70 1
27.65 1
27.20 1
28.00 1
dtype: int64
data_dict = {'BABA': 187.07, 'PDD': 21.83, 'JD': 30.79, 'BIDU': 184.77}
s3 = pd.Series(data_dict, name="中概股")
s3.index.name = "股票代号"
s3
股票代号
BABA 187.07
PDD 21.83
JD 30.79
BIDU 184.77
Name: 中概股, dtype: float64
stock = ['FB', 'BABA', 'PDD', 'JD']
datas = [160.0,28.0,25.0, np.nan ]
s4 = pd.Series(datas, index=stock)
s4 + s3
BABA 215.07
BIDU NaN
FB NaN
JD NaN
PDD 46.83
dtype: float64
DataFrame
# 用列表或数组
# df1 = pd.DataFrame([[1,2,3], [4,5,6]])
df1 = pd.DataFrame(np.array([[1,2,3], [4,5,6]]))
df1
symbol = ['BABA', 'JD', 'AAPL', 'MS', 'GS', 'WMT']
data = {'行业': ['电商', '电商', '科技', '金融', '金融', '零售'],
'价格': [176.92, 25.95, 172.97, 41.79, 196.00, 99.55],
'交易量': [16175610, 27113291, 18913154, 10132145, 2626634, 8086946],
'雇员': [101550, 175336, 100000, 60348, 36600, 2200000]}
df2 = pd.DataFrame(data, index=symbol)
df2.name = "美股"
df2.index.name = "代号"
df2
|
行业 |
价格 |
交易量 |
雇员 |
代号 |
|
|
|
|
BABA |
电商 |
176.92 |
16175610 |
101550 |
JD |
电商 |
25.95 |
27113291 |
175336 |
AAPL |
科技 |
172.97 |
18913154 |
100000 |
MS |
金融 |
41.79 |
10132145 |
60348 |
GS |
金融 |
196.00 |
2626634 |
36600 |
WMT |
零售 |
99.55 |
8086946 |
2200000 |
df2.values
array([['电商', 176.92, 16175610, 101550],
['电商', 25.95, 27113291, 175336],
['科技', 172.97, 18913154, 100000],
['金融', 41.79, 10132145, 60348],
['金融', 196.0, 2626634, 36600],
['零售', 99.55, 8086946, 2200000]], dtype=object)
df2.columns
Index(['行业', '价格', '交易量', '雇员'], dtype='object')
df2.index
Index(['BABA', 'JD', 'AAPL', 'MS', 'GS', 'WMT'], dtype='object', name='代号')
查看DataFrame
df2.head() # 默认5行
|
行业 |
价格 |
交易量 |
雇员 |
代号 |
|
|
|
|
BABA |
电商 |
176.92 |
16175610 |
101550 |
JD |
电商 |
25.95 |
27113291 |
175336 |
AAPL |
科技 |
172.97 |
18913154 |
100000 |
MS |
金融 |
41.79 |
10132145 |
60348 |
GS |
金融 |
196.00 |
2626634 |
36600 |
df2.tail(3)
|
行业 |
价格 |
交易量 |
雇员 |
代号 |
|
|
|
|
MS |
金融 |
41.79 |
10132145 |
60348 |
GS |
金融 |
196.00 |
2626634 |
36600 |
WMT |
零售 |
99.55 |
8086946 |
2200000 |
统计DataFrame
df2.describe()
# 函数 describe() 只对「数值型变量」有用
|
价格 |
交易量 |
雇员 |
count |
6.000000 |
6.000000e+00 |
6.000000e+00 |
mean |
118.863333 |
1.384130e+07 |
4.456390e+05 |
std |
73.748714 |
8.717312e+06 |
8.607522e+05 |
min |
25.950000 |
2.626634e+06 |
3.660000e+04 |
25% |
56.230000 |
8.598246e+06 |
7.026100e+04 |
50% |
136.260000 |
1.315388e+07 |
1.007750e+05 |
75% |
175.932500 |
1.822877e+07 |
1.568895e+05 |
max |
196.000000 |
2.711329e+07 |
2.200000e+06 |
升维DataFrame
df2.index = pd.MultiIndex.from_tuples(
[('中国公司','BABA'), ('中国公司','JD'),
('美国公司','AAPL'), ('美国公司','MS'),
('美国公司','GS'), ('美国公司','WMT')] )
df2
|
|
行业 |
价格 |
交易量 |
雇员 |
中国公司 |
BABA |
电商 |
176.92 |
16175610 |
101550 |
JD |
电商 |
25.95 |
27113291 |
175336 |
美国公司 |
AAPL |
科技 |
172.97 |
18913154 |
100000 |
MS |
金融 |
41.79 |
10132145 |
60348 |
GS |
金融 |
196.00 |
2626634 |
36600 |
WMT |
零售 |
99.55 |
8086946 |
2200000 |
三维 Panel
Panel 在未来版本中会被废除
dates = pd.date_range('20190401',periods=4)
data = {'开盘价': [27.2, 27.65, 27.70, 28],
'收盘价': [27.1, 27.55, 27.45, 28.1]}
df1 = pd.DataFrame( data, index=dates )
data = {'开盘价': [367, 369.8, 378.2, 380.6],
'收盘价': [369.5, 370.1, 380, 382.1]}
df2 = pd.DataFrame( data, index=dates )
p_data = {'海底捞' : df1, '腾讯' : df2}
pn = pd.Panel(p_data)
pn
C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py:2961: FutureWarning:
Panel is deprecated and will be removed in a future version.
The recommended way to represent these types of 3-dimensional data are with a MultiIndex on a DataFrame, via the Panel.to_frame() method
Alternatively, you can use the xarray package http://xarray.pydata.org/en/stable/.
Pandas provides a `.to_xarray()` method to help automate this conversion.
exec(code_obj, self.user_global_ns, self.user_ns)
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 4 (major_axis) x 2 (minor_axis)
Items axis: 海底捞 to 腾讯
Major_axis axis: 2019-04-01 00:00:00 to 2019-04-04 00:00:00
Minor_axis axis: 开盘价 to 收盘价
数据表的存载
# to_excel()
# to_csv()
# to_sql()
# to_hdf()
# read_excel()
# read_csv()
# read_sql()
# read_hdf()
Excel格式
df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6]]))
df.to_excel('pd_excel.xlsx', sheet_name='Sheet1')
df1 = pd.read_excel('pd_excel.xlsx', sheet_name='Sheet1')
df1
csv格式
# pd.to_csv( '文件名',index=False )
# 注意如果 index 没有特意设定,最后不要把 index 值存到 csv 文件中
data = {'Code': ['BABA', '00700.HK', 'AAPL', '600519.SH'],
'Name': ['阿里巴巴', '腾讯', '苹果', '茅台'],
'Market': ['US', 'HK', 'US', 'SH'],
'Price': [185.35, 380.2, 197, 900.2],
'Currency': ['USD', 'HKD', 'USD', 'CNY']}
df = pd.DataFrame(data)
df.to_csv('pd_csv.csv', index=False)
df2 = pd.read_csv('pd_csv.csv')
df2
|
Code |
Name |
Market |
Price |
Currency |
0 |
BABA |
阿里巴巴 |
US |
185.35 |
USD |
1 |
00700.HK |
腾讯 |
HK |
380.20 |
HKD |
2 |
AAPL |
苹果 |
US |
197.00 |
USD |
3 |
600519.SH |
茅台 |
SH |
900.20 |
CNY |
数据表的索引和切片
symbol = ['BABA', 'JD', 'AAPL', 'MS', 'GS', 'WMT']
data = {'行业': ['电商', '电商', '科技', '金融', '金融', '零售'],
'价格': [176.92, 25.95, 172.97, 41.79, 196.00, 99.55],
'交易量': [16175610, 27113291, 18913154, 10132145, 2626634, 8086946],
'雇员': [101550, 175336, 100000, 60348, 36600, 2200000]}
df = pd.DataFrame(data, index=symbol)
df.name = "美股"
df.indexname = "代号"
df
|
行业 |
价格 |
交易量 |
雇员 |
BABA |
电商 |
176.92 |
16175610 |
101550 |
JD |
电商 |
25.95 |
27113291 |
175336 |
AAPL |
科技 |
172.97 |
18913154 |
100000 |
MS |
金融 |
41.79 |
10132145 |
60348 |
GS |
金融 |
196.00 |
2626634 |
36600 |
WMT |
零售 |
99.55 |
8086946 |
2200000 |
索引单元素
df.at['AAPL', '价格']
172.97
df.iat[2, 1]
172.97
切片 columns
df.价格
BABA 176.92
JD 25.95
AAPL 172.97
MS 41.79
GS 196.00
WMT 99.55
Name: 价格, dtype: float64
df['价格']
BABA 176.92
JD 25.95
AAPL 172.97
MS 41.79
GS 196.00
WMT 99.55
Name: 价格, dtype: float64
df.loc[:, '交易量']
BABA 16175610
JD 27113291
AAPL 18913154
MS 10132145
GS 2626634
WMT 8086946
Name: 交易量, dtype: int64
df.iloc[:, 0]
BABA 电商
JD 电商
AAPL 科技
MS 金融
GS 金融
WMT 零售
Name: 行业, dtype: object
df[['雇员', '价格']]
|
雇员 |
价格 |
BABA |
101550 |
176.92 |
JD |
175336 |
25.95 |
AAPL |
100000 |
172.97 |
MS |
60348 |
41.79 |
GS |
36600 |
196.00 |
WMT |
2200000 |
99.55 |
df.loc[:, '行业':'交易量']
|
行业 |
价格 |
交易量 |
BABA |
电商 |
176.92 |
16175610 |
JD |
电商 |
25.95 |
27113291 |
AAPL |
科技 |
172.97 |
18913154 |
MS |
金融 |
41.79 |
10132145 |
GS |
金融 |
196.00 |
2626634 |
WMT |
零售 |
99.55 |
8086946 |
df.iloc[:, 0:2]
|
行业 |
价格 |
BABA |
电商 |
176.92 |
JD |
电商 |
25.95 |
AAPL |
科技 |
172.97 |
MS |
金融 |
41.79 |
GS |
金融 |
196.00 |
WMT |
零售 |
99.55 |
切片 index
df
|
行业 |
价格 |
交易量 |
雇员 |
BABA |
电商 |
176.92 |
16175610 |
101550 |
JD |
电商 |
25.95 |
27113291 |
175336 |
AAPL |
科技 |
172.97 |
18913154 |
100000 |
MS |
金融 |
41.79 |
10132145 |
60348 |
GS |
金融 |
196.00 |
2626634 |
36600 |
WMT |
零售 |
99.55 |
8086946 |
2200000 |
df.loc['GS', :]
行业 金融
价格 196
交易量 2626634
雇员 36600
Name: GS, dtype: object
df.iloc[3, :]
行业 金融
价格 41.79
交易量 10132145
雇员 60348
Name: MS, dtype: object
df[1:2]
|
行业 |
价格 |
交易量 |
雇员 |
JD |
电商 |
25.95 |
27113291 |
175336 |
df['JD': 'JD']
|
行业 |
价格 |
交易量 |
雇员 |
JD |
电商 |
25.95 |
27113291 |
175336 |
df[1:4]
|
行业 |
价格 |
交易量 |
雇员 |
JD |
电商 |
25.95 |
27113291 |
175336 |
AAPL |
科技 |
172.97 |
18913154 |
100000 |
MS |
金融 |
41.79 |
10132145 |
60348 |
df['GS': 'WMT']
|
行业 |
价格 |
交易量 |
雇员 |
GS |
金融 |
196.00 |
2626634 |
36600 |
WMT |
零售 |
99.55 |
8086946 |
2200000 |
df.loc['MS': 'GS', :]
|
行业 |
价格 |
交易量 |
雇员 |
MS |
金融 |
41.79 |
10132145 |
60348 |
GS |
金融 |
196.00 |
2626634 |
36600 |
df.iloc[1:3, :]
|
行业 |
价格 |
交易量 |
雇员 |
JD |
电商 |
25.95 |
27113291 |
175336 |
AAPL |
科技 |
172.97 |
18913154 |
100000 |
切片 index 和 columns
df.loc['GS': 'WMT', '价格']
GS 196.00
WMT 99.55
Name: 价格, dtype: float64
df.iloc[:2, 1:3]
|
价格 |
交易量 |
BABA |
176.92 |
16175610 |
JD |
25.95 |
27113291 |
高级索引
print(df.雇员 >= 100000)
df.loc[df.雇员 >= 100000, :]
BABA True
JD True
AAPL True
MS False
GS False
WMT True
Name: 雇员, dtype: bool
|
行业 |
价格 |
交易量 |
雇员 |
BABA |
电商 |
176.92 |
16175610 |
101550 |
JD |
电商 |
25.95 |
27113291 |
175336 |
AAPL |
科技 |
172.97 |
18913154 |
100000 |
WMT |
零售 |
99.55 |
8086946 |
2200000 |
print(df.dtypes == 'int64')
df.loc[:, df.dtypes == 'int64']
行业 False
价格 False
交易量 True
雇员 True
dtype: bool
|
交易量 |
雇员 |
BABA |
16175610 |
101550 |
JD |
27113291 |
175336 |
AAPL |
18913154 |
100000 |
MS |
10132145 |
60348 |
GS |
2626634 |
36600 |
WMT |
8086946 |
2200000 |
df.loc[lambda x: x.交易量 > x.交易量.mean(), :]
|
行业 |
价格 |
交易量 |
雇员 |
BABA |
电商 |
176.92 |
16175610 |
101550 |
JD |
电商 |
25.95 |
27113291 |
175336 |
AAPL |
科技 |
172.97 |
18913154 |
100000 |
df.loc[lambda x: (x.交易量 > x.交易量.mean()) & (x.价格 > 100), :]
|
行业 |
价格 |
交易量 |
雇员 |
BABA |
电商 |
176.92 |
16175610 |
101550 |
AAPL |
科技 |
172.97 |
18913154 |
100000 |
df.价格.loc[lambda x: x>100]
BABA 176.92
AAPL 172.97
GS 196.00
Name: 价格, dtype: float64
price = [190,32,196,192,200,189,31,30,199]
dates = ['2019-04-01']*3 + ['2019-04-02']*2+['2019-04-03']*2 + ['2019-04-04']*2
codes = ['BABA','JD','GS','BABA','GS','BABA','JD','JD','GS']
data = pd.Series( price,
index=[ dates, codes ])
data
2019-04-01 BABA 190
JD 32
GS 196
2019-04-02 BABA 192
GS 200
2019-04-03 BABA 189
JD 31
2019-04-04 JD 30
GS 199
dtype: int64
data.index
MultiIndex(levels=[['2019-04-01', '2019-04-02', '2019-04-03', '2019-04-04'], ['BABA', 'GS', 'JD']],
labels=[[0, 0, 0, 1, 1, 2, 2, 3, 3], [0, 2, 1, 0, 1, 0, 2, 2, 1]])
data = {'地区': ['中国', '中国', '美国', '美国'],
'代号': ['BABA', 'JD', 'MS', 'GS'],
'行业': ['电商', '电商', '金融', '金融'],
'价格': [176.92, 25.95, 41.79, 196.00],
'交易量': [16175610, 27113291, 10132145, 2626634],
'雇员': [101550, 175336, 60348, 36600] }
df = pd.DataFrame( data )
df
|
地区 |
代号 |
行业 |
价格 |
交易量 |
雇员 |
0 |
中国 |
BABA |
电商 |
176.92 |
16175610 |
101550 |
1 |
中国 |
JD |
电商 |
25.95 |
27113291 |
175336 |
2 |
美国 |
MS |
金融 |
41.79 |
10132145 |
60348 |
3 |
美国 |
GS |
金融 |
196.00 |
2626634 |
36600 |
df2 = df.set_index(['地区', '代号'])
df2
|
|
行业 |
价格 |
交易量 |
雇员 |
地区 |
代号 |
|
|
|
|
中国 |
BABA |
电商 |
176.92 |
16175610 |
101550 |
JD |
电商 |
25.95 |
27113291 |
175336 |
美国 |
MS |
金融 |
41.79 |
10132145 |
60348 |
GS |
金融 |
196.00 |
2626634 |
36600 |
df2.reset_index()
|
地区 |
代号 |
行业 |
价格 |
交易量 |
雇员 |
0 |
中国 |
BABA |
电商 |
176.92 |
16175610 |
101550 |
1 |
中国 |
JD |
电商 |
25.95 |
27113291 |
175336 |
2 |
美国 |
MS |
金融 |
41.79 |
10132145 |
60348 |
3 |
美国 |
GS |
金融 |
196.00 |
2626634 |
36600 |
数据表的合并和连接
合并
df_price = pd.DataFrame( {'Date': pd.date_range('2019-1-1', periods=4),
'Adj Close': [24.42, 25.00, 25.25, 25.64]})
df_price
|
Date |
Adj Close |
0 |
2019-01-01 |
24.42 |
1 |
2019-01-02 |
25.00 |
2 |
2019-01-03 |
25.25 |
3 |
2019-01-04 |
25.64 |
df_volume = pd.DataFrame( {'Date': pd.date_range('2019-1-2', periods=5),
'Volume' : [56081400, 99455500, 83028700, 100234000, 73829000]})
df_volume
|
Date |
Volume |
0 |
2019-01-02 |
56081400 |
1 |
2019-01-03 |
99455500 |
2 |
2019-01-04 |
83028700 |
3 |
2019-01-05 |
100234000 |
4 |
2019-01-06 |
73829000 |
pd.merge(df_price, df_volume, how='left')
|
Date |
Adj Close |
Volume |
0 |
2019-01-01 |
24.42 |
NaN |
1 |
2019-01-02 |
25.00 |
56081400.0 |
2 |
2019-01-03 |
25.25 |
99455500.0 |
3 |
2019-01-04 |
25.64 |
83028700.0 |
pd.merge(df_price, df_volume, how='right')
|
Date |
Adj Close |
Volume |
0 |
2019-01-02 |
25.00 |
56081400 |
1 |
2019-01-03 |
25.25 |
99455500 |
2 |
2019-01-04 |
25.64 |
83028700 |
3 |
2019-01-05 |
NaN |
100234000 |
4 |
2019-01-06 |
NaN |
73829000 |
pd.merge(df_price, df_volume, how='outer')
|
Date |
Adj Close |
Volume |
0 |
2019-01-01 |
24.42 |
NaN |
1 |
2019-01-02 |
25.00 |
56081400.0 |
2 |
2019-01-03 |
25.25 |
99455500.0 |
3 |
2019-01-04 |
25.64 |
83028700.0 |
4 |
2019-01-05 |
NaN |
100234000.0 |
5 |
2019-01-06 |
NaN |
73829000.0 |
pd.merge(df_price, df_volume, how='inner')
|
Date |
Adj Close |
Volume |
0 |
2019-01-02 |
25.00 |
56081400 |
1 |
2019-01-03 |
25.25 |
99455500 |
2 |
2019-01-04 |
25.64 |
83028700 |
多键合并
porfolio1 = pd.DataFrame({'Asset': ['FX', 'FX', 'IR'],
'Instrument': ['Option', 'Swap', 'Option'],
'Number': [1, 2, 3]})
porfolio1
|
Asset |
Instrument |
Number |
0 |
FX |
Option |
1 |
1 |
FX |
Swap |
2 |
2 |
IR |
Option |
3 |
porfolio2 = pd.DataFrame({'Asset': ['FX', 'FX', 'FX', 'IR'],
'Instrument': ['Option', 'Option', 'Swap', 'Swap'],
'Number': [4, 5, 6, 7]})
porfolio2
|
Asset |
Instrument |
Number |
0 |
FX |
Option |
4 |
1 |
FX |
Option |
5 |
2 |
FX |
Swap |
6 |
3 |
IR |
Swap |
7 |
pd.merge(porfolio1, porfolio2, on=['Asset', 'Instrument'], how='outer')
|
Asset |
Instrument |
Number_x |
Number_y |
0 |
FX |
Option |
1.0 |
4.0 |
1 |
FX |
Option |
1.0 |
5.0 |
2 |
FX |
Swap |
2.0 |
6.0 |
3 |
IR |
Option |
3.0 |
NaN |
4 |
IR |
Swap |
NaN |
7.0 |
pd.merge(porfolio1, porfolio2, on='Asset')
|
Asset |
Instrument_x |
Number_x |
Instrument_y |
Number_y |
0 |
FX |
Option |
1 |
Option |
4 |
1 |
FX |
Option |
1 |
Option |
5 |
2 |
FX |
Option |
1 |
Swap |
6 |
3 |
FX |
Swap |
2 |
Option |
4 |
4 |
FX |
Swap |
2 |
Option |
5 |
5 |
FX |
Swap |
2 |
Swap |
6 |
6 |
IR |
Option |
3 |
Swap |
7 |
连接
s1 = pd.Series([0, 1], index=['a', 'b'])
s2 = pd.Series([2, 3, 4], index=['c', 'd', 'e'])
s3 = pd.Series([5, 6], index=['f', 'g'])
pd.concat([s1, s2, s3])
a 0
b 1
c 2
d 3
e 4
f 5
g 6
dtype: int64
pd.concat([s1, s2, s3], axis=1, sort=False)
|
0 |
1 |
2 |
a |
0.0 |
NaN |
NaN |
b |
1.0 |
NaN |
NaN |
c |
NaN |
2.0 |
NaN |
d |
NaN |
3.0 |
NaN |
e |
NaN |
4.0 |
NaN |
f |
NaN |
NaN |
5.0 |
g |
NaN |
NaN |
6.0 |
pd.concat([s1, s4], axis=1, join='inner')
pd.concat([s1, s2, s3], keys=['one', 'two', 'three'])
one a 0
b 1
two c 2
d 3
e 4
three f 5
g 6
dtype: int64
连接DataFrame
df1 = pd.DataFrame( np.arange(12).reshape(3,4),
columns=['a','b','c','d'])
df1
|
a |
b |
c |
d |
0 |
0 |
1 |
2 |
3 |
1 |
4 |
5 |
6 |
7 |
2 |
8 |
9 |
10 |
11 |
df2 = pd.DataFrame( np.arange(6).reshape(2,3),
columns=['b','d','a'])
df2
pd.concat([df1, df2])
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version
of pandas will change to not sort by default.
To accept the future behavior, pass 'sort=False'.
To retain the current behavior and silence the warning, pass 'sort=True'.
"""Entry point for launching an IPython kernel.
|
a |
b |
c |
d |
0 |
0 |
1 |
2.0 |
3 |
1 |
4 |
5 |
6.0 |
7 |
2 |
8 |
9 |
10.0 |
11 |
0 |
2 |
0 |
NaN |
1 |
1 |
5 |
3 |
NaN |
4 |
pd.concat([df1, df2], ignore_index=True)
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version
of pandas will change to not sort by default.
To accept the future behavior, pass 'sort=False'.
To retain the current behavior and silence the warning, pass 'sort=True'.
"""Entry point for launching an IPython kernel.
|
a |
b |
c |
d |
0 |
0 |
1 |
2.0 |
3 |
1 |
4 |
5 |
6.0 |
7 |
2 |
8 |
9 |
10.0 |
11 |
3 |
2 |
0 |
NaN |
1 |
4 |
5 |
3 |
NaN |
4 |
数据表的重塑和透视
重塑
symbol = ['JD', 'AAPL']
data = {'行业': ['电商', '科技'],
'价格': [25.95, 172.97],
'交易量': [27113291, 18913154]}
df = pd.DataFrame( data, index=symbol )
df.columns.name = '特征'
df.index.name = '代号'
df
特征 |
行业 |
价格 |
交易量 |
代号 |
|
|
|
JD |
电商 |
25.95 |
27113291 |
AAPL |
科技 |
172.97 |
18913154 |
df.stack() # 列索引 → 行索引
代号 特征
JD 行业 电商
价格 25.95
交易量 27113291
AAPL 行业 科技
价格 172.97
交易量 18913154
dtype: object
df.unstack()
特征 代号
行业 JD 电商
AAPL 科技
价格 JD 25.95
AAPL 172.97
交易量 JD 27113291
AAPL 18913154
dtype: object
df.describe()
特征 |
价格 |
交易量 |
count |
2.000000 |
2.000000e+00 |
mean |
99.460000 |
2.301322e+07 |
std |
103.958839 |
5.798372e+06 |
min |
25.950000 |
1.891315e+07 |
25% |
62.705000 |
2.096319e+07 |
50% |
99.460000 |
2.301322e+07 |
75% |
136.215000 |
2.506326e+07 |
max |
172.970000 |
2.711329e+07 |
df.info()
<class 'pandas.core.frame.DataFrame'>
Index: 2 entries, JD to AAPL
Data columns (total 3 columns):
行业 2 non-null object
价格 2 non-null float64
交易量 2 non-null int64
dtypes: float64(1), int64(1), object(1)
memory usage: 144.0+ bytes
完~