我给一个dataframe分配了一些值,并得到了以下警告消息:
# temp is some data
x = temp[temp.loc[:, cat] == 1]
x.loc[:, "category_id"] = cat # warning occurred here
/home/jupyter-inhyeok_yoo/.conda/envs/test/lib/python3.6/site-packages/pandas/core/indexing.py:1596: SettingWithCopyWarning:
A value is trying to be set
我有一个代码,我正在修改这样的单元格:IBM["PNL"][2]=3。它有效,但它显示了一个警告:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
根据我在本文中所能读到的,修改该值的一种适当方法是IBM.loc[2,"PNL"]=3。但
我的问题只是关于性能,而不是语义。
向df添加新列是否会导致将现有DataFrame中的数据物理复制到新的内存位置(例如,以确保DataFrame占用连续内存)?
# using pandas 0.18.1, python 3.5
import pandas as pd
df = pd.DataFrame({'a': range(100)})
b = pd.Series(range(100))
df['b'] = b # is this operation expensive?
# equivalently df.loc[:, 'b'] = b
我有一个非常简单的数据,如下所示:
In [8]: df
Out[8]:
A B C
0 2 a a
1 3 s 3
2 4 c !
3 1 f 1
我的目标是以如下方式提取第一行:
A B C
0 2 a a
如您所见,dataframe形状(1x3)被保留,第一行仍然有3列。
但是,当我输入以下命令df.loc[0]时,输出结果如下:
df.loc[0]
Out[9]:
A 2
B a
C a
Name: 0, dtype: object
如您所见,该行已变成3行的列!(3x1而不是3x1)。这怎麽可能?如何才能像我的