我想从'B'中的日期中减去'A'中的日期,并添加一个带有差异的新列.
df
A B
one 2014-01-01 2014-02-28
two 2014-02-03 2014-03-01
Run Code Online (Sandbox Code Playgroud)
我尝试了以下内容,但是当我尝试将其包含在for循环中时出现错误...
import datetime
date1=df['A'][0]
date2=df['B'][0]
mdate1 = datetime.datetime.strptime(date1, "%Y-%m-%d").date()
rdate1 = datetime.datetime.strptime(date2, "%Y-%m-%d").date()
delta = (mdate1 - rdate1).days
print delta
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
我正在解析Excel文件中的数据,该文件在某些列标题中有额外的空白区域.
当我检查结果数据帧的列时,如下所示:
df.columns
结果如下:
Index(['Year', 'Month ', 'Value'])
因此,我无法逃避
df["Month"]
因为它会告诉我找不到列,因为我要求"月",而不是"月".
那么,我的问题是如何从列标题中删除不需要的空白区域?
使用R时,使用它可以方便地加载"练习"数据集
data(iris)
Run Code Online (Sandbox Code Playgroud)
要么
data(mtcars)
Run Code Online (Sandbox Code Playgroud)
熊猫有类似的东西吗?我知道我可以使用任何其他方法加载,只是好奇是否内置任何东西
我在groupby结果上使用.size()来计算每个组中有多少项.
我希望将结果保存到新的列名而无需手动编辑列名数组,如何才能完成?
谢谢
这是我尝试过的:
grpd = df.groupby(['A','B'])
grpd['size'] = grpd.size()
grpd
Run Code Online (Sandbox Code Playgroud)
和我得到的错误:
TypeError:'DataFrameGroupBy'对象不支持项目分配(在第二行)
import pandas as pd
dfs = pd.HDFStore('xxxxx.h5')
Run Code Online (Sandbox Code Playgroud)
抛出此错误:
"ImportError: HDFStore requires PyTables, "No module named tables" problem importing"
我试图安装PyTables,需要Cython.我安装了Cython 0.21,但它抛出了一个错误,说明Cython应该大于0.13
这是我得到的日志:
".. ERROR:: You need Cython 0.13 or greater to compile PyTables!
----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1 in /private/tmp/pip_build_root/tables
Storing debug log for failure in /Users/nikhilsahai/Library/Logs/pip.log
Nikhils-MacBook-Pro:~ nikhilsahai$ sudo pip install cython
Requirement already satisfied (use --upgrade to upgrade): cython in /Library/Python/2.7/site-packages/Cython-0.21-py2.7-macosx-10.9-intel.egg
Cleaning up..."
Run Code Online (Sandbox Code Playgroud)
请指导我如何解决这个问题.
我正在试验kaggle.com泰坦尼克号数据集(泰坦尼克号上每个人的数据),并想出了这样的性别分类:
gender = df.sex.value_counts()
gender
male 577
female 314
Run Code Online (Sandbox Code Playgroud)
我想知道泰坦尼克号上每个性别的百分比.
我的方法略逊于理想:
from __future__ import division
pcts = gender / gender.sum()
pcts
male 0.647587
female 0.352413
Run Code Online (Sandbox Code Playgroud)
有更好的(更惯用的)方式吗?
谢谢!
我知道我可以DataFrame通过重置索引来获取a的唯一值,但有没有办法避免这一步并直接获得唯一值?
鉴于我有:
C
A B
0 one 3
1 one 2
2 two 1
Run Code Online (Sandbox Code Playgroud)
我可以:
df = df.reset_index()
uniq_b = df.B.unique()
df = df.set_index(['A','B'])
Run Code Online (Sandbox Code Playgroud)
大熊猫有没有办法做到这一点?
例
s=pd.Series([5,4,3,2,1], index=[1,2,3,4,5])
print s
1 5
2 4
3 3
4 2
5 1
Run Code Online (Sandbox Code Playgroud)
有没有一种有效的方法来创建一个系列.例如,在每一行中包含滞后值(在此示例中最多滞后2)
3 [3, 4, 5]
4 [2, 3, 4]
5 [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
这相当于s = pd.Series([[3,4,5],[2,3,4],[1,2,3]],index = [3,4,5])
对于具有很长时间序列的数据帧,如何以高效的方式完成这项工作?
谢谢
看到答案后编辑
好的,最后我实现了这个功能:
def buildLaggedFeatures(s,lag=2,dropna=True):
'''
Builds a new DataFrame to facilitate regressing over all possible lagged features
'''
if type(s) is pd.DataFrame:
new_dict={}
for col_name in s:
new_dict[col_name]=s[col_name]
# create lagged Series
for l in range(1,lag+1):
new_dict['%s_lag%d' %(col_name,l)]=s[col_name].shift(l)
res=pd.DataFrame(new_dict,index=s.index)
elif type(s) is pd.Series:
the_range=range(lag+1) …Run Code Online (Sandbox Code Playgroud) 我有一个数据框,我想按特定列(或换句话说,来自特定列的值)对其进行分组.我可以通过以下方式完成:grouped = df.groupby(['ColumnName']).
我把这个操作的结果想象成一个表,其中一些单元格可以包含多组值而不是单个值.为了得到一个通常的表(即每个单元格只包含一个单个值的表),我需要指出我想用什么函数将单元格中的值集转换为单个值.
例如,我可以用它们的总和或它们的最小值或最大值来替换值集.我可以通过以下方式完成:grouped.sum()或者grouped.min()依此类推.
现在我想为不同的列使用不同的函数.我发现我可以通过以下方式实现:grouped.agg({'ColumnName1':sum, 'ColumnName2':min}).
但是,由于某些原因我无法使用first.更多细节,grouped.first()作品,但grouped.agg({'ColumnName1':first, 'ColumnName2':first})不起作用.结果我得到一个NameError : NameError: name 'first' is not defined. 所以,我的问题是:为什么会发生以及如何解决这个问题.
添加
在这里,我找到了以下示例:
grouped['D'].agg({'result1' : np.sum, 'result2' : np.mean})
Run Code Online (Sandbox Code Playgroud)
可能我还需要使用np?但在我的情况下,python不识别"np".我应该导入吗?
如何get_dummies在多个DataFrame列上以惯用方式运行一个函数,它需要单个列并返回多个列?