【发布时间】:2017-02-25 19:40:20
【问题描述】:
我是 python 新手,有时对一些操作感到困惑
我有一个名为 ro 的数据框,我还使用特定列 PN 3D 过滤了此数据框以获取特定值 921,然后我使用以下代码将结果分配到一个名为 headlamp 的新数据框中:
headlamp = ro[ro['PN 3D']=="921"]
我的头灯也是一个数据框还是只是一个切片? 我之所以问这个问题是因为我稍后在我的脚本中收到了一些奇怪的警告和结果。
例如,我创建了一个名为word 的新列并分配给headlamp
headlamp['word'] = ""
我收到以下警告:
A value is trying to be set on a copy of a slice from a DataFrame
之后我使用以下脚本将结果分配给headlamp['word']
i = 0
for row in headlamp['Comment'].astype(list):
headlamp['word'][i] = Counter(str(row).split())
i+=1
print headlamp['word']
出现了同样的警告,它影响了我的结果,因为当我使用headlamp.tail() 时,headlamp['word'] 的最后一行是空的。
有谁知道问题出在哪里以及如何解决?
我们将不胜感激任何帮助
【问题讨论】:
-
headlamp = ro[ro['PN 3D']=="921"].copy() -
如果
headlamp是一个数据框,您应该将一个series对象分配给一个列,而不仅仅是一个空字符串。类似headlamp['word'] = pd.Series(...) -
感谢您的两位回复。我用过这个
.copy(),我有同样的警告和错误@MaxU。关于您的回复@TammoHeeren,我还为word列中的所有行分配了0 值,但是在我应用脚本后,i = 0 for row in headlamp['Comment']: headlamp['word'][i] = (Counter(str(row).split())) i+=1 print headlamp['word']i = 0 for row in headlamp['Comment']: headlamp['word'][i] = (Counter(str(row).split())) i+=1 print headlamp['word'] -
我遇到了与上面描述的相同的问题,该脚本并未应用于我的数据框
headlamp中的所有行。你们现在为什么?
标签: python pandas dataframe slice