【发布时间】:2016-04-09 21:37:37
【问题描述】:
问题被简化:
我需要根据列中的文本是否具有“-”字符来提取和修改 DataFrame 的特定行。破折号和除此之外的所有内容都需要删除,其余文本必须是“-”之前的任何内容。
have:
textcol
0 no dash here
1 one - here
want:
textcol
0 one
这是用于重新创建我的场景的代码。
df = pd.DataFrame(data=['no dash here', 'one - here'], index=[0, 1], columns=['textcol'])
df2 = df[df['textcol'].str.contains('-') == True]
df2.loc[:, ['textcol']] = df2['textcol'].str.split('-').str[0]
生成的DataFrame df2 会产生我想要的结果,但有一个例外。每次我调用 df2(或之后的任何派生词)时,我都会收到以下 SettingWithCopyWarning:
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
我试图以不同的方式完成我想要的事情,但收到了一个类似的错误,指示我尝试使用 .loc() 功能,但我仍然收到这个类似的错误。
我有没有更好的、无错误威胁的方法来完成这个结果?恐怕这里发生了一些我不明白的事情,最终 df2 不会产生我想要的结果。我也想知道像.query() 这样的东西是否可行。
【问题讨论】:
-
您在分配给
df2时已经查看/复制了您想直接在df 上操作:df.loc[df['textcol'].str.contains('-'), 'textcol'] = df['textcol'].str.split('-').str[0]我认为应该可以工作 -
@EdChum,我仍然收到同样的错误:(