我想在IPython笔记本上写一篇论文,但是遇到了显示格式的一些问题.说我有以下的数据帧df
,有没有什么办法来格式化var1
和var2
成2位小数和var3
成比例.
var1 var2 var3
id
0 1.458315 1.500092 -0.005709
1 1.576704 1.608445 -0.005122
2 1.629253 1.652577 -0.004754
3 1.669331 1.685456 -0.003525
4 1.705139 1.712096 -0.003134
5 1.740447 1.741961 -0.001223
6 1.775980 1.770801 -0.001723
7 1.812037 1.799327 -0.002013
8 1.853130 1.822982 -0.001396
9 1.943985 1.868401 0.005732
Run Code Online (Sandbox Code Playgroud)
内部数字不会乘以100,例如-0.0057 = -0.57%.
我有一个非常大的数据框df
,看起来像:
ID Value1 Value2
1345 3.2 332
1355 2.2 32
2346 1.0 11
3456 8.9 322
Run Code Online (Sandbox Code Playgroud)
我有一个包含ID子集的列表ID_list
.我需要的一个子集df
为ID
包含在ID_list
.
目前,我正在使用df_sub=df[df.ID.isin(ID_list)]
它.但这需要很多时间.ID
s中包含的ID_list
没有任何模式,因此它不在一定范围内.(我需要对许多类似的数据帧应用相同的操作.我想知道是否有更快的方法来执行此操作.如果将make ID
作为索引,它会有很大帮助吗?
谢谢!
我有一个时间序列数据框 df
看起来像这样(时间seris发生在同一天,但在不同的时间:
id val
time
2014-04-03 16:01:53 23 14389
2014-04-03 16:01:54 28 14391
2014-04-03 16:05:55 24 14393
2014-04-03 16:06:25 23 14395
2014-04-03 16:07:01 23 14395
2014-04-03 16:10:09 23 14395
2014-04-03 16:10:23 26 14397
2014-04-03 16:10:57 26 14397
2014-04-03 16:11:10 26 14397
Run Code Online (Sandbox Code Playgroud)
我需要从开始每隔5分钟创建一个组16:00:00
.即,在范围内的所有的行16:00:00
到16:05:00
其新列的值period
是1(行的每个组内的编号是不规则的,所以我不能简单地切断基团)
最终,数据应如下所示:
id val period
time
2014-04-03 16:01:53 23 14389 1
2014-04-03 16:01:54 28 14391 1
2014-04-03 16:05:55 24 14393 2
2014-04-03 16:06:25 23 14395 2
2014-04-03 16:07:01 23 14395 …
Run Code Online (Sandbox Code Playgroud) 以下代码无法将我的日期列解析为csv文件中的日期.
data=pd.read_csv('c:/data.csv',parse_dates=True,keep_date_col = True)
Run Code Online (Sandbox Code Playgroud)
要么
data=pd.read_csv('c:/data.csv',parse_dates=[0])
Run Code Online (Sandbox Code Playgroud)
数据如下
date value
30MAR1990 140000
30JUN1990 30000
30SEP1990 120000
30DEC1990 34555
Run Code Online (Sandbox Code Playgroud)
我做错了什么?请帮忙!
谢谢.
是否有现有函数来估算Pandas或Statsmodels的固定效应(单向或双向).
以前在Statsmodels中有一个函数,但似乎已经停止了.在Pandas中,有一些叫做的东西plm
,但是我无法导入或运行它pd.plm()
.
我有一列时间戳需要转换为句点('月').例如
1985-12-31 00:00:00 to 1985-12
Run Code Online (Sandbox Code Playgroud)
Pandas有一个.to_period函数,但它只适用于时间戳索引,而不适用于列.那么你只能有一个期间索引,而不是一个期间列?
它只有在时间戳是唯一索引时才有效.也就是说,如果时间戳是multIndex的一部分,则.to_period()函数也不起作用.
似乎Pandas假设人们总是使用时间戳和句点作为索引,但不是单个列,显然不是这样.
无论如何,我可以解决这个问题?或者如果不是在熊猫中,它可以在numpy中完成吗?
谢谢!
我有以下数据(18,619,211行)存储为hdf5文件中的pandas dataframe对象:
date id2 w
id
100010 1980-03-31 10401 0.000839
100010 1980-03-31 10604 0.020140
100010 1980-03-31 12490 0.026149
100010 1980-03-31 13047 0.033560
100010 1980-03-31 13303 0.001657
Run Code Online (Sandbox Code Playgroud)
id
索引在哪里,其他是列.date
是np.datetime64
.我需要执行这样的查询(代码当然不起作用):
db=pd.HDFStore('database.h5')
data=db.select('df', where='id==id_i & date>bgdt & date<endt')
Run Code Online (Sandbox Code Playgroud)
注意id_i, bgdt, endt
是所有变量,而不是实际值,需要在循环中传递.例如:
dates
是一个Pandas Period索引或时间戳索引,无论哪种方式,我都可以互相转换.
dates=['1990-01', 1990-04','1990-09',......]
Run Code Online (Sandbox Code Playgroud)
id_list
是一个ID列表
id_list=[100010, 100011,1000012,.......]
Run Code Online (Sandbox Code Playgroud)
循环看起来像这样(我做循环的原因是因为数据很大,我有其他数据集在同一时间查询然后执行一些操作)
db=pd.HDFStore('database.h5')
for id_i in id_list:
for date in dates:
bgdt=date-1 (move to previous month)
endt=date-60 (previous 60 month)
data=db.select('df', where='index==id_i & date>bgdt & date<endt')
......
Run Code Online (Sandbox Code Playgroud)
这个问题有两个部分: …
我有一个典型的"面板数据"(在计量经济学术语中,不是pandas面板对象).数据框有一Date
列和一ID
列,以及包含特定值的其他列.对于每个日期,我需要将基于V1的ID进行横截面排序为10组(十分位数),并创建一个名为rank_col
(取值1到10)的新列来识别排名.然后将所有rank1,rank2,... rank10汇集在一起以获得一些统计数据,如mean,std.
这可以通过以下代码在SAS中轻松完成,它还说明了我的目的:
proc sort data=df;
by Date;
proc rank data=df out=df_ranked groups=10;
var V1;
ranks rank_col;
by Date;
run;
Run Code Online (Sandbox Code Playgroud)
df_ranked
df
除了它有更多的列rank_col
,其中包含每行所属的等级组之外,它是相同的.
对不起,我没有显示结构的示例数据,需要一个真实的长数据来说明.但SAS代码正好显示了我的目标.
谢谢你的帮助!
我想知道是否有一种基于多索引选择或子集Pandas数据帧的简洁方法.我的数据看起来像这样(id和date是索引):
values
id date
10113 2010-07-21 24.7000
2010-07-22 25.2600
2010-07-23 25.2800
2010-07-26 25.3700
2010-07-27 25.2900
10223 2011-07-21 24.7000
2011-07-22 25.2600
2011-07-23 25.2800
2011-07-26 25.3700
2011-07-27 25.2900
Run Code Online (Sandbox Code Playgroud)
我想要这样的东西:
df.xs[10223).xs('2011-07-21':'2011-07-30')
Run Code Online (Sandbox Code Playgroud)
但上面的代码不适用于第二个xs()
.xs()
只能选择一行,而不是数据帧的子集.我也试过df.query()
和df.ix()
,但没有运气.
谢谢你的帮助!
计量经济学背景
Fama Macbeth回归指的是针对面板数据运行回归的过程(其中存在N个不同的个体并且每个个体对应于多个周期T,例如日,月,年).所以总共有N x T obs.请注意,如果面板数据不平衡,则可以.
Fama Macbeth回归是首先对每个时期进行跨部门的回归,即在给定的时间段内将N个人聚集在一起.为t = 1,...做这个.因此总共运行T回归.然后我们有每个自变量的时间序列系数.然后我们可以使用系数的时间序列进行假设检验.通常我们将平均值作为每个自变量的最终系数.我们使用t-stats来测试重要性.
我的问题
我的问题是在熊猫中实现这一点.从大熊猫的源代码中,我注意到有一个名为的过程fama_macbeth
.但我找不到任何关于此的文件.
操作也可以轻松完成groupby
.目前我这样做:
def fmreg(data,formula):
return smf.ols(formula,data=data).fit().params[1]
res=df.groupby('date').apply(fmreg,'ret~var1')
Run Code Online (Sandbox Code Playgroud)
这是有效的,res
是一个由系数索引date
的系列和系列的值params[1]
,它是系数var1
.但现在我想拥有更多自变量,我需要提取所有这些自变量的系数,但我无法弄清楚.我试过这个
def fmreg(data,formula):
return smf.ols(formula,data=data).fit().params
res=df.groupby('date').apply(fmreg,'ret~var1+var2+var3')
Run Code Online (Sandbox Code Playgroud)
这不行.期望的结果是,res
是由索引的数据帧date
,以及数据帧的每列应包含各变量的系数intercept
,var1
,var2
和var3
.
我也检查过statsmodels
,他们也没有这样的内置程序.
是否有任何包可以产生出版品质的回归表?就像outreg2
在Stata和texreg
R?谢谢你的帮助!
pandas ×10
python ×10
datetime ×4
numpy ×3
statsmodels ×2
dataframe ×1
formatting ×1
group-by ×1
hdf5 ×1
pytables ×1
r ×1
regression ×1
subset ×1