如果我添加两列来创建第三列,那么任何包含NaN(代表我的世界中缺少数据)的列都会导致生成的输出列也是NaN.有没有办法在没有明确地将值设置为0的情况下跳过NaN(这会失去那些值"缺失"的概念)?
In [42]: frame = pd.DataFrame({'a': [1, 2, np.nan], 'b': [3, np.nan, 4]})
In [44]: frame['c'] = frame['a'] + frame['b']
In [45]: frame
Out[45]:
a b c
0 1 3 4
1 2 NaN NaN
2 NaN 4 NaN
Run Code Online (Sandbox Code Playgroud)
在上面,我希望列c为[4,2,4].
谢谢...
我在开放范围/第一小时(美国东部时间上午9:30-10:30)有基于分钟的OHLCV数据.我想重新采样这些数据,这样我可以获得一个60分钟的值,然后计算范围.
当我在数据上调用dataframe.resample()函数时,我得到两行,初始行在上午9:00开始.我期待只有一行从上午9:30开始.
注意:初始数据从9:30开始.

编辑:添加代码:
# Extract data for regular trading hours (rth) from the 24 hour data set
rth = data.between_time(start_time = '09:30:00', end_time = '16:15:00', include_end = False)
# Extract data for extended trading hours (eth) from the 24 hour data set
eth = data.between_time(start_time = '16:30:00', end_time = '09:30:00', include_end = False)
# Extract data for initial balance (rth) from the 24 hour data set
initial_balance = data.between_time(start_time = '09:30:00', end_time = '10:30:00', include_end = False)
Run Code Online (Sandbox Code Playgroud)
卡住试图按个别日期分开开盘范围并获得初始余额
conversion …Run Code Online (Sandbox Code Playgroud) 我有一个数据框.然后我有一个逻辑条件,通过删除一些行我创建另一个数据框.但是,新数据框会跳过已删除行的索引.如何在不跳过的情况下顺序重新索引?这是一个编码澄清的样本
import pandas as pd
import numpy as np
jjarray = np.array(range(5))
eq2 = jjarray == 2
neq2 = np.logical_not(eq2)
jjdf = pd.DataFrame(jjarray)
jjdfno2 = jjdf[neq2]
jjdfno2
Run Code Online (Sandbox Code Playgroud)
日期:
0
0 0
1 1
3 3
4 4
Run Code Online (Sandbox Code Playgroud)
我希望它看起来像这样:
0
0 0
1 1
2 3
3 4
Run Code Online (Sandbox Code Playgroud)
谢谢.
我pd.set_option("display.colheader_justify","right")用来设置列标题.但我无法找到数据选项pd.describe_option().
如何设置数据框内的数据显示每列的左对齐或右对齐?或者,是否可以为整个行数据显示定义格式模板?
我的csv文件没有第一列的列名,我想重命名它.通常,我会这样做data.rename(columns={'oldname':'newname'}, inplace=True),但csv文件中没有名称,只是''.
我想要一个更大的图表.但是,matplotlib中的figure方法似乎不能正常工作.
我收到一条消息,这不是错误:
import pandas.io.data as web
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
...
plt.figure(figsize=(20,10))
df2['media']= df2['SPY']*.6 + df2['TLT']*.4
df2.plot()
plt.show()
Run Code Online (Sandbox Code Playgroud)
我的代码出了什么问题?
我的目标是为DataFrame获取唯一的哈希值.我从.csv文件中获取它.整点是每次调用hash()时获取相同的哈希值.
我的想法是我创建了这个功能
def _get_array_hash(arr):
arr_hashable = arr.values
arr_hashable.flags.writeable = False
hash_ = hash(arr_hashable.data)
return hash_
Run Code Online (Sandbox Code Playgroud)
即调用底层numpy数组,将其设置为不可变状态并获取缓冲区的哈希值.
INLINE UPD.
截至2016年11月8日,此版本的功能不再起作用.相反,你应该使用
hash(df.values.tobytes())
Run Code Online (Sandbox Code Playgroud)
内联UPD结束.
它适用于常规pandas数组:
In [12]: data = pd.DataFrame({'A': [0], 'B': [1]})
In [13]: _get_array_hash(data)
Out[13]: -5522125492475424165
In [14]: _get_array_hash(data)
Out[14]: -5522125492475424165
Run Code Online (Sandbox Code Playgroud)
但后来我尝试将它应用于从.csv文件中获取的DataFrame:
In [15]: fpath = 'foo/bar.csv'
In [16]: data_from_file = pd.read_csv(fpath)
In [17]: _get_array_hash(data_from_file)
Out[17]: 6997017925422497085
In [18]: _get_array_hash(data_from_file)
Out[18]: -7524466731745902730
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下,这怎么可能?
我可以创建新的DataFrame,比如
new_data = pd.DataFrame(data=data_from_file.values,
columns=data_from_file.columns,
index=data_from_file.index)
Run Code Online (Sandbox Code Playgroud)
它再次有效
In [25]: _get_array_hash(new_data)
Out[25]: -3546154109803008241
In …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用pandas DataFrame的pivot_table方法;
mean_ratings = data.pivot_table('rating', rows='title', cols='gender', aggfunc='mean')
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-55-cb4d494f2f39> in <module>()
----> 1 mean_ratings = data.pivot_table('rating', rows='title', cols='gender', aggfunc='mean')
TypeError: pivot_table() got an unexpected keyword argument 'rows'
Run Code Online (Sandbox Code Playgroud)
以上命令取自Wes McKinney(熊猫的创造者)的" Python for Data Analysis " 一书
我有一个数据集:
Open High Low Close
0 132.960 133.340 132.940 133.105
1 133.110 133.255 132.710 132.755
2 132.755 132.985 132.640 132.735
3 132.730 132.790 132.575 132.685
4 132.685 132.785 132.625 132.755
Run Code Online (Sandbox Code Playgroud)
我尝试对所有行使用rolling.apply函数,如下所示:
df['new_col']= df[['Open']].rolling(2).apply(AccumulativeSwingIndex(df['High'],df['Low'],df['Close']))
Run Code Online (Sandbox Code Playgroud)
要么
df['new_col']= df[['Open', 'High', 'Low', 'Close']].rolling(2).apply(AccumulativeSwingIndex)
Run Code Online (Sandbox Code Playgroud)
有谁能够帮我?
有没有比bdate_range()更好的方法来测量两个日期之间通过熊猫的工作日?
df = pd.DataFrame({ 'A' : ['1/1/2013', '2/2/2013', '3/3/2013'],
'B': ['1/12/2013', '4/4/2013', '3/3/2013']})
print df
df['A'] = pd.to_datetime(df['A'])
df['B'] = pd.to_datetime(df['B'])
f = lambda x: len(pd.bdate_range(x['A'], x['B']))
df['DIFF'] = df.apply(f, axis=1)
print df
Run Code Online (Sandbox Code Playgroud)
输出:
A B
0 1/1/2013 1/12/2013
1 2/2/2013 4/4/2013
2 3/3/2013 3/3/2013
A B DIFF
0 2013-01-01 00:00:00 2013-01-12 00:00:00 9
1 2013-02-02 00:00:00 2013-04-04 00:00:00 44
2 2013-03-03 00:00:00 2013-03-03 00:00:00 0
Run Code Online (Sandbox Code Playgroud)
谢谢!