繁体   English   中英

pandas dataframe:从整个数据帧的所有单元格值中添加和删除前缀/后缀

pandas dataframe : add & remove prefix/suffix from all cell values of entire dataframe

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

要为数据帧添加前缀/后缀,我通常会执行以下操作。

例如,要添加后缀'@'

df = df.astype(str) + '@'

这基本上将'@'附加到所有单元格值。

我想知道如何删除此后缀。 是否有一个pandas.DataFrame类直接从整个DataFrame中删除特定前缀/后缀字符的方法?

我尝试使用rstrip('@')迭代行(作为系列rstrip('@') ,如下所示:

for index in range(df.shape[0]):
    row = df.iloc[index]
    row = row.str.rstrip('@')

现在,为了使这个系列的数据帧,

new_df = pd.DataFrame(columns=list(df))
new_df = new_df.append(row)

但是,这不起作用。 提供空数据框。

有什么东西真的很基本我错过了吗?

3 个回复

您可以使用applystr.strip方法:

In [13]: df
Out[13]:
       a       b      c
0    dog   quick    the
1   lazy    lazy    fox
2  brown   quick    dog
3  quick     the   over
4  brown    over   lazy
5    fox   brown  quick
6  quick     fox    the
7    dog  jumped    the
8   lazy   brown    the
9    dog    lazy    the

In [14]: df = df + "@"

In [15]: df
Out[15]:
        a        b       c
0    dog@   quick@    the@
1   lazy@    lazy@    fox@
2  brown@   quick@    dog@
3  quick@     the@   over@
4  brown@    over@   lazy@
5    fox@   brown@  quick@
6  quick@     fox@    the@
7    dog@  jumped@    the@
8   lazy@   brown@    the@
9    dog@    lazy@    the@

In [16]: df = df.apply(lambda S:S.str.strip('@'))

In [17]: df
Out[17]:
       a       b      c
0    dog   quick    the
1   lazy    lazy    fox
2  brown   quick    dog
3  quick     the   over
4  brown    over   lazy
5    fox   brown  quick
6  quick     fox    the
7    dog  jumped    the
8   lazy   brown    the
9    dog    lazy    the

请注意,您的方法不起作用,因为当您在for循环中执行以下分配时:

row = row.str.rstrip('@')

这只是将row.str.strip的结果分配给名称row而不改变DataFrame 这与所有python对象和简单名称赋值的行为相同:

In [18]: rows = [[1,2,3],[4,5,6],[7,8,9]]

In [19]: print(rows)
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

In [20]: for row in rows:
    ...:     row = ['look','at','me']
    ...:

In [21]: print(rows)
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

要实际更改基础数据结构,您需要使用mutator方法:

In [22]: rows
Out[22]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

In [23]: for row in rows:
    ...:     row.append("LOOKATME")
    ...:

In [24]: rows
Out[24]: [[1, 2, 3, 'LOOKATME'], [4, 5, 6, 'LOOKATME'], [7, 8, 9, 'LOOKATME']]

请注意,切片赋值只是mutator方法的语法糖:

In [26]: rows
Out[26]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

In [27]: for row in rows:
    ...:     row[:] = ['look','at','me']
    ...:
    ...:

In [28]: rows
Out[28]: [['look', 'at', 'me'], ['look', 'at', 'me'], ['look', 'at', 'me']]

这类似于基于pandas lociloc的赋值。

您可以使用applymap将字符串方法应用于每个元素:

df = df.applymap(lambda x: str(x).rstrip('@'))

注意:我不希望这与矢量化方法一样快: pd.Series.str.rstrip即分别转换每列

您可以使这很简单,只需使用pandas.DataFrame.replace()方法将所有“@”替换为“”:

df.replace("@", "")

如果您担心“@”被替换而不仅仅是在值的末尾,您可以使用正则表达式:

df.replace("@$", "", regex=True) 
1 从数据框的所有单元格值中删除前缀

我有一个熊猫数据框,如下所示: 字段为 int 类型,索引为 int 类型,值可以为 int 或 float 类型。 我想将此数据框转换为以下预期输出: 我想从所有单元格中删除所有field:值。 这个怎么做? 编辑:单元格的示例如下所示: 1:1:1.0445731675303e-06 ...

4 为数据帧的每一行添加前缀和后缀,但最后一行没有后缀,然后全部折叠

我有值的数据帧,我需要追加前缀和后缀以每行期待的最后一排,我不希望添加后缀,但做前缀。 然后我需要将此数据框折叠为单个字符串,以便我可以将其传递到 SQL 查询中。 我的数据如下所示: 我需要附加"BRAND_NAME LIKE '%"作为前缀和"%' OR"作为后缀,然后折叠以便我的字符串 ...

2020-07-06 11:00:10 2 69   r/ dplyr
5 从数据框中的col的某些值中删除前缀

我正在尝试标准化大数据框中的列,其中某些值的前缀为“ 6016”,而有些则没有。 我需要删除所有的“ 6016”前缀,但是我不知道该怎么做。 我是R的新手,所以很简单。 这是数据框的一个片段: 我需要本专栏是这样的,而不影响其他专栏: ...

2019-06-17 15:15:27 2 23   r
6 从系列或数据帧中删除后缀

我想从以下数据集中的相关列值中删除“00”。 我使用了以下代码: 它返回以下错误: 如果我使用以下代码,我会收到与 Series 相同的错误: 谢谢! ...

7 从整个数据框中删除重复的值

我有一个Pandas DataFrame,如下所示; 要从数据框中删除重复的值,我已经完成了; 结果 有更好的方法吗? 有没有一种方法可以通过使用drop_duplicates来实现? 编辑: 另外,如果我还有两个列“ C”和“ D”,但只需要从“ A”和“ ...

9 从 Pandas 中的名称(前缀和后缀)中删除敬语

包含敬语的名称,例如- 埃文斯先生 阿莱弗雷德,小 我想从名称中删除所有前缀和后缀,特别是熊猫名称中使用的所有不同类型的敬语。 作为输出,我想要- 埃文斯 艾莉·弗雷德 我使用了一些代码,但在某些情况下它不起作用,我想要一个非常健壮的代码。 有没有办法做到这一点? ...

10 无法基于熊猫数据框中的条件在值上添加前缀

首先,我是Python的新手,所以我不是专家... 这是我的问题。 我有这个数据框: 事实是, CODE_IRIS是一个object ,应该具有9个字符,如下所示: 因此,当CODE_IRIS的字符长度CODE_IRIS 9时,我需要传递前缀0 ,就像我在Excel中使用 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM