我刚刚将我的Pandas从0.11升级到0.13.0rc1.现在,该应用程序正在弹出许多新的警告.其中一个是这样的:
E:\FinReporter\FM_EXT.py:449: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
quote_df['TVol'] = quote_df['TVol']/TVOL_SCALE
Run Code Online (Sandbox Code Playgroud)
我想知道究竟是什么意思?我需要改变什么吗?
如果我坚持使用,我应该如何暂停警告quote_df['TVol'] = quote_df['TVol']/TVOL_SCALE?
def _decode_stock_quote(list_of_150_stk_str):
"""decode the webpage and return dataframe"""
from cStringIO import StringIO
str_of_all = "".join(list_of_150_stk_str)
quote_df = pd.read_csv(StringIO(str_of_all), sep=',', names=list('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg')) #dtype={'A': object, 'B': object, 'C': np.float64}
quote_df.rename(columns={'A':'STK', 'B':'TOpen', 'C':'TPCLOSE', 'D':'TPrice', 'E':'THigh', 'F':'TLow', 'I':'TVol', 'J':'TAmt', 'e':'TDate', 'f':'TTime'}, inplace=True)
quote_df = quote_df.ix[:,[0,3,2,1,4,5,8,9,30,31]]
quote_df['TClose'] = quote_df['TPrice']
quote_df['RT'] …Run Code Online (Sandbox Code Playgroud) 我正在学习Python pandas库.来自R背景,索引和选择功能似乎比它们需要的更复杂.我理解.loc()只是基于标签而.iloc()只是基于整数.
如果.ix()更快并支持整数和标签访问,为什么我应该使用.loc()和.iloc()?
我有如下所示的数据框.我需要获取B列的标量值,这取决于A的值(这是我脚本中的变量).我正在尝试loc()函数,但它返回一个Series而不是标量值.如何获得标量值()?
>>> x = pd.DataFrame({'A' : [0,1,2], 'B' : [4,5,6]})
>>> x
A B
0 0 4
1 1 5
2 2 6
>>> x.loc[x['A'] == 2]['B']
2 6
Name: B, dtype: int64
>>> type(x.loc[x['A'] == 2]['B'])
<class 'pandas.core.series.Series'>
Run Code Online (Sandbox Code Playgroud) pandas 提供了按行和列索引列表查找的功能,
In [49]: index = ['a', 'b', 'c', 'd']
In [50]: columns = ['one', 'two', 'three', 'four']
In [51]: M = pandas.DataFrame(np.random.randn(4,4), index=index, columns=columns)
In [52]: M
Out[52]:
one two three four
a -0.785841 -0.538572 0.376594 1.316647
b 0.530288 -0.975547 1.063946 -1.049940
c -0.794447 -0.886721 1.794326 -0.714834
d -0.158371 0.069357 -1.003039 -0.807431
In [53]: M.lookup(index, columns) # diagonal entries
Out[53]: array([-0.78584142, -0.97554698, 1.79432641, -0.8074308 ])
Run Code Online (Sandbox Code Playgroud)
我想使用相同的索引方法来设置M元素.我怎样才能做到这一点?
假设我们有一个 pandas 数据框:
name age sal
0 Alex 20 100
1 Jane 15 200
2 John 25 300
3 Lsd 23 392
4 Mari 21 380
Run Code Online (Sandbox Code Playgroud)
假设现在删除了几行,但我们不知道已删除的索引。例如,我们使用 删除行索引 1 df.drop([1])。现在数据框可以归结为:
fname age sal
0 Alex 20 100
2 John 25 300
3 Lsd 23 392
4 Mari 21 380
Run Code Online (Sandbox Code Playgroud)
我想从行索引 3 和列“年龄”获取值。它应该返回 23。我该怎么做?
df.iloc[3, df.columns.get_loc('age')]不起作用,因为它将返回 21。我猜 iloc 采用连续行索引?
我有一个关系数据库格式的数据集(通过各种.csv文件的ID链接).
我知道每个数据框只包含一个ID值,我想知道从该行中提取值的最简单方法.
我现在在做什么:
# the group has only one element
purchase_group = purchase_groups.get_group(user_id)
price = list(purchase_group['Column_name'])[0]
Run Code Online (Sandbox Code Playgroud)
第三排困扰我,因为它似乎很难看,但我不确定解决方法是什么.分组(我猜)假设可能有多个值并返回一个<class 'pandas.core.frame.DataFrame'>对象,而我只想返回一行.
我想做的应该是非常简单的.基本上,我有一些数据帧,我需要为某些列分配一些元组值.
例如:
pd_tmp = pd.DataFrame(np.random.rand(3,3))
pd_tmp["new_column"] = ("a",2)
Run Code Online (Sandbox Code Playgroud)
我只需要一个带有元组值的新列,我该怎么办?
ValueError: Length of values does not match length of index
Run Code Online (Sandbox Code Playgroud)
前面的代码得到错误.