如何将字符串的pandas索引转换为datetime格式
我的数据框'df'是这样的
value
2015-09-25 00:46 71.925000
2015-09-25 00:47 71.625000
2015-09-25 00:48 71.333333
2015-09-25 00:49 64.571429
2015-09-25 00:50 72.285714
Run Code Online (Sandbox Code Playgroud)
但索引是字符串类型,但我需要一个日期时间格式,因为我得到错误
'Index' object has no attribute 'hour'
Run Code Online (Sandbox Code Playgroud)
使用时
df['A'] = df.index.hour
Run Code Online (Sandbox Code Playgroud) 为什么我们将'loc'用于pandas数据帧?似乎以下代码使用或不使用loc编译anr以相同的速度运行
%timeit df_user1 = df.loc[df.user_id=='5561']
100 loops, best of 3: 11.9 ms per loop
Run Code Online (Sandbox Code Playgroud)
要么
%timeit df_user1_noloc = df[df.user_id=='5561']
100 loops, best of 3: 12 ms per loop
Run Code Online (Sandbox Code Playgroud)
那么为什么要使用loc?
编辑:这已被标记为重复的问题.但是,虽然pandas iloc vs ix vs loc解释?确实提到*
你可以只使用数据框的getitem进行列检索 :
*
df['time'] # equivalent to df.loc[:, 'time']
Run Code Online (Sandbox Code Playgroud)
它没有说明为什么我们使用loc,虽然它确实解释了loc的许多功能,但我的具体问题是"为什么不完全省略loc"?我已经接受了以下非常详细的答案.
还有其他帖子的答案(我认为不是答案)在讨论中非常隐藏,任何寻找我正在寻找的人都会发现很难找到信息,而且提供的答案会更好我的问题.
我需要使用lambda函数来逐行计算.例如,创建一些数据帧
import pandas as pd
import numpy as np
def myfunc(x, y):
return x + y
colNames = ['A', 'B']
data = np.array([np.arange(10)]*2).T
df = pd.DataFrame(data, index=[range(0, 10)], columns=colNames)
Run Code Online (Sandbox Code Playgroud)
使用'myfunc'这确实有效
df['D'] = (df.apply(lambda x: myfunc(x.A, x.B), axis=1))
Run Code Online (Sandbox Code Playgroud)
但这第二种情况不起作用!
df['D'] = (df.apply(lambda x: myfunc(x.colNames[0], x.colNames[1]), axis=1))
Run Code Online (Sandbox Code Playgroud)
给出错误
AttributeError: ("'Series' object has no attribute 'colNames'", u'occurred at index 0')
Run Code Online (Sandbox Code Playgroud)
我真的需要使用第二种情况(使用列表访问colNames),这会产生错误,有关如何执行此操作的任何线索?
谢谢
我有一个pandas数据帧'df',有两列'A'和'B',我有一个带有两个参数的函数
def myfunction(B, A):
# do something here to get the result
return result
Run Code Online (Sandbox Code Playgroud)
我想使用'apply'函数逐行将它应用到df
df['C'] = df['B'].apply(myfunction, args=(df['A'],))
Run Code Online (Sandbox Code Playgroud)
但我得到了错误
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Run Code Online (Sandbox Code Playgroud)
什么发生在这里,似乎需要df ['A']作为整个系列!不仅仅是该系列中的行条目.
在Statsmodels中,我可以使用我的模型
import statsmodels.api as sm
X = np.array([22000, 13400, 47600, 7400, 12000, 32000, 28000, 31000, 69000, 48600])
y = np.array([0.62, 0.24, 0.89, 0.11, 0.18, 0.75, 0.54, 0.61, 0.92, 0.88])
X2 = sm.add_constant(X)
est = sm.OLS(y, X2)
est2 = est.fit()
Run Code Online (Sandbox Code Playgroud)
然后使用打印一个很好的摘要
print(est2.summary())
Run Code Online (Sandbox Code Playgroud)
并使用提取的东西,如p值
est2.pvalues
Run Code Online (Sandbox Code Playgroud)
但是在摘要中存在置信区间,我对如何提取这些置信区间感到迷茫,就像我对pvalues一样.
除了在摘要中看到它们,我怎样才能获得这些置信区间?
我需要自然对数函数用于.cpp(c ++)源文件.现在,我当然可以通过快速谷歌搜索和简单的库解决方案来做到这一点.但我有点困惑......
在cplusplus dot com网站的参考/ cmath/log /下他们有一个如何使用日志功能的例子,如下
/* log example */
#include <stdio.h> /* printf */
#include <math.h> /* log */
int main ()
{
double param, result;
param = 5.5;
result = log (param);
printf ("log(%f) = %f\n", param, result );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我有一些问题:
1)他们为什么使用
<stdio.h>
Run Code Online (Sandbox Code Playgroud)
我认为这是针对C而不是C++?
2)他们为什么使用
<math.h>
Run Code Online (Sandbox Code Playgroud)
我虽然.h代表C头文件而不是.hpp C++头文件?
忘记使用stdio(无论如何我会使用iostream),但即便如此
<math.h>
Run Code Online (Sandbox Code Playgroud)
感觉就像我在编写C代码而不是C++代码.我通过教学课程学习C++,教师在第一周学习了C,然后说我们不再使用C,但从现在开始将使用C++.如果老师问"你为什么使用C头文件?我应该用C++工作",我觉得自己无法解释自己.
任何解释都非常感激.
我有一个名为'df'的pandas dataFrame,如下所示
value
2015-09-27 03:58:30 1.0
2015-09-27 03:59:30 1.0
2015-09-27 04:00:30 1.0
2015-09-27 04:01:30 1.0
Run Code Online (Sandbox Code Playgroud)
我只想删除秒数来获得这个
value
2015-09-27 03:58:00 1.0
2015-09-27 03:59:00 1.0
2015-09-27 04:00:00 1.0
2015-09-27 04:01:00 1.0
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
香港专业教育学院尝试过像
df.index.to_series().apply(datetime.replace(second=0, microsecond=0))
Run Code Online (Sandbox Code Playgroud)
但我总是得到错误
TypeError: descriptor 'replace' of 'datetime.datetime' object needs an argument
Run Code Online (Sandbox Code Playgroud) 我有一个pandas日期框架,以下代码可以正常工作
df['hour'] = df.index.hour
df['c'] = df['hour'].apply(circadian)
Run Code Online (Sandbox Code Playgroud)
但我试图使用以下代码减少制作'小时'coloumn的需要
df['c'] = df.apply(lambda x: circadian(x.index.hour), axis=1)
Run Code Online (Sandbox Code Playgroud)
但我收到错误信息
AttributeError: ("'Index' object has no attribute 'hour'", u'occurred at index 2015-09-25 01:00:00')
Run Code Online (Sandbox Code Playgroud)
有人知道怎么做吗?
我有一个叫做'df'的熊猫系列如下
value
date_time_index
2015-10-28 01:54:00 1.0
2015-10-28 01:55:00 1.0
2015-10-28 01:56:00 1.0
2015-10-28 01:57:00 1.0
2015-10-28 01:58:00 1.0
Run Code Online (Sandbox Code Playgroud)
我只想要一个新的列,连续行之间的秒数差异,我该怎么做?
注意:类型是
type(df.index[1])
Run Code Online (Sandbox Code Playgroud)
作为
pandas.tslib.Timestamp
Run Code Online (Sandbox Code Playgroud) 我试图平滑一条曲线,但由于 x 轴值是日期,我在这样做时遇到了很大的麻烦。假设我们有一个如下的数据框
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
%matplotlib inline
startDate = '2015-05-15'
endDate = '2015-12-5'
index = pd.date_range(startDate, endDate)
data = np.random.normal(0, 1, size=len(index))
cols = ['value']
df = pd.DataFrame(data, index=index, columns=cols)
Run Code Online (Sandbox Code Playgroud)
然后我们绘制数据
fig, axs = plt.subplots(1,1, figsize=(18,5))
x = df.index
y = df.value
axs.plot(x, y)
fig.show()
Run Code Online (Sandbox Code Playgroud)
我们得到
现在为了平滑这条线,已经有一些有用的 staekoverflow 问题,例如:
但是对于我的示例,我似乎无法使用一些代码来执行此操作,有什么建议吗?