这是一个非常基本的问题,我似乎找不到答案。
我有一个这样的数据帧,叫做df:
A B C
a.1 b.1 c.1
a.2 b.2 c.2
a.3 b.3 c.3
然后我从df中提取所有行,其中列'B'的值为'B.2'。我将这些结果分配给df_2。
df_2 = df[df['B'] == 'b.2']
df_2变成:
A B C
a.2 b.2 c.2
然后,我将列B中的所有值复制到名为D的新列中。使df_2成为:
A B C D
a.2 b.2 c.2 b.2
当我执行这样的任务时:
df_2['D'] = df_2['B']
我得到以下警告:
试图在数据帧切片的副本上设置值。尝试使用。loc[row\u indexer,col\u indexer]=改为value
请参阅文档中的注意事项:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-查看与复制
我也试过使用。创建df_2时的loc如下所示:
df_2 = df.loc[df['B'] == 'b.2']
然而,我还是得到了警告。
任何帮助都非常感谢。
我认为正确的访问方法是使用索引:
df_2.loc[:,'D'] = df_2['B']
问题就在发出警告的人之前。当您创建df_2时,您正在创建数据帧片段的副本。相反,当您创建df_2时,使用。copy()以后您将不会收到该警告。
df_2 = df[df['B'] == 'b.2'].copy()
您可以简单地将B
分配给新列,如-
df['D'] = df['B']
示例/演示-
In [1]: import pandas as pd
In [2]: df = pd.DataFrame([['a.1','b.1','c.1'],['a.2','b.2','c.2'],['a.3','b.3','c.3']],columns=['A','B','C'])
In [3]: df
Out[3]:
A B C
0 a.1 b.1 c.1
1 a.2 b.2 c.2
2 a.3 b.3 c.3
In [4]: df['D'] = df['B'] #<---What you want.
In [5]: df
Out[5]:
A B C D
0 a.1 b.1 c.1 b.1
1 a.2 b.2 c.2 b.2
2 a.3 b.3 c.3 b.3
In [6]: df.loc[0,'D'] = 'd.1'
In [7]: df
Out[7]:
A B C D
0 a.1 b.1 c.1 d.1
1 a.2 b.2 c.2 b.2
2 a.3 b.3 c.3 b.3
问题内容: 我想在Pandas Dataframe中复制行。每行应重复n次,其中n是每行的一个字段。 这可能吗? 问题答案: 您可以用来获取重复的索引,然后使用它来索引框架: 之后,只需清理一下即可: 请注意,如果您可能有重复的索引值得担心,则可以改用: 使用位置,而不使用索引标签。
我想使用两列作为行ID,同时计算基于时间的分组。请看下图: 转化成这样: 正在发生的是,X在时间10发生了0次,但在15和23发生了1次。 Y在10点钟发生了3次,但在15和23没有。等等。
问题内容: 我有一个名称为的csv文件。我打开并使用以下方法创建了一个熊猫: 其中,是字符串对象的python列表。示例(实际列表的长度为22): 在ipython提示符下,如果我键入并按Enter键,则不会获得带有列和值的数据框,如Pandas网站上的示例所示。相反,我获得有关数据框的信息。我得到: 如果我键入,那么我确实会获得该列的预期值。我有两个问题: (1)在pandas网站上的示例中(例
使用pandas dataframe假设我有如下结构相似的数据帧: 我想要一个新的2列(Choise,Value),它满足“a_Cho”、“b_Cho”和“c_Cho”中所有值的以下条件 如果“a_Cho”=true,则选择“a_n”,值=a对应于“a_Cho”的值如果“a_Cho”=false,则移动到下一步 如果“b_Cho”=true,则选择“b_n”,值=b表示“b_Cho”的对应值,如果
问题内容: 我注意到程序中存在一个错误,发生该错误的原因是因为熊猫似乎是通过引用熊猫数据框而不是通过值进行复制。我知道不可变对象将始终通过引用传递,但pandas数据帧不是不可变的,因此我不明白为什么它通过引用传递。谁能提供一些信息? 谢谢!安德鲁 问题答案: Python中的所有函数都是“按引用传递”,没有“按值传递”。如果要显式复制pandas对象,请尝试。
问题内容: 这可能很容易,但是我有以下数据: 在数据框1中: 在数据框2中: 我想要一个具有以下形式的数据框: 我尝试使用该方法,但是得到了交叉连接(即笛卡尔积)。 什么是正确的方法? 问题答案: 通常看来,您只是在寻找联接: