0

我有一个很长的电子表格 (CSV),其中过长的 URL 已从“网站”列移动到“注释”列几列。不幸的是,标记此类单元格的惯例并不一致(有人说“查看”,其他人可能会说“查看超长 url”,但我相信在不同情况下都包括“查看”)。我正在使用一个非常复杂的 pandas 脚本来创建一个损坏的数据透视表,但我仍在努力找出 pandas 的所有快捷方式。我将如何创建一个条件,将给定行的注释列单元格移动到网站列单元格中,条件是后者包含“查看”?在这种情况下,我还想清空注释列单元格(在其他情况下,我想保持该单元格完整)。

在类似的注释中,我将如何创建一个条件,以便如果“Foo”列中的值显示“Bar”,我可以忽略将其写入输出,而是在“Foo”列中输入一个值?说“是”?

4

1 回答 1

2

为此,我认为我不会尝试任何太可爱的事情:只需弄清楚哪些行需要移动东西,然后移动它们。从像这样的框架开始

>>> df
                      Website                               Notes Other
0    http://stackoverflow.com                 home away from home     a
1  http://mapleleafs.nhl.com/                                1967     b
2                    see over  http://www.example.com/not_so_long     c
3       http://www.colts.com/            the Luck of the Hoosiers     d

我会做类似的事情

>>> to_shift_over = df.Website.str.lower().str.contains("see over")
>>> df.loc[to_shift_over, "Website"] = df["Notes"]
>>> df.loc[to_shift_over, "Notes"] = ""

生产

>>> df
                              Website                     Notes Other
0            http://stackoverflow.com       home away from home     a
1          http://mapleleafs.nhl.com/                      1967     b
2  http://www.example.com/not_so_long                               c
3               http://www.colts.com/  the Luck of the Hoosiers     d

使用stron aSeries是对它们执行矢量操作的便捷方法:

>>> df["Website"].str
<pandas.core.strings.StringMethods object at 0xa9dcfac>
>>> df["Website"].str.lower()
0      http://stackoverflow.com
1    http://mapleleafs.nhl.com/
2                      see over
3         http://www.colts.com/
Name: Website, dtype: object
>>> df["Website"].str.lower().str.contains("see over")
0    False
1    False
2     True
3    False
Name: Website, dtype: bool

然后我们可以使用该布尔数组来索引dfusing .loc

>>> df.loc[to_shift_over]
    Website                               Notes Other
2  see over  http://www.example.com/not_so_long     c
>>> df.loc[to_shift_over, "Website"]
2    see over
Name: Website, dtype: object
于 2013-11-07T19:31:07.300 回答