当前位置: 首页 > 知识库问答 >
问题:

从Dataframe-Pandas中所有列的列名中删除最后两个字符

邓昀
2023-03-14

我加入两个数据帧(a,b)与相同的列/列名使用用户ID键,并在加入时,我必须给后缀字符,以便它被创建。以下是我使用的命令,

a.join(b,how='inner', on='userId',lsuffix="_1")

如果我不使用这个后缀,我就会出错。但是我不想更改列名,因为这会在运行其他分析时导致问题。所以我想从结果数据帧的所有列名中删除这个“_1”字符。有人能给我一个有效的方法来删除数据框中所有列名称的最后两个字符吗?

谢谢

共有2个答案

柯瀚海
2023-03-14

您可以像这样使用str.rstrip

In [214]: import functools as ft

In [215]: f = ft.partial(np.random.choice, *[5, 3])

In [225]: df = pd.DataFrame({'a': f(), 'b': f(), 'c': f(), 'a_1': f(), 'b_1': f(), 'c_1': f()})

In [226]: df
Out[226]:
   a  b  c  a_1  b_1  c_1
0  4  2  0    2    3    2
1  0  0  3    2    1    1
2  4  0  4    4    4    3

In [227]: df.columns = df.columns.str.rstrip('_1')

In [228]: df
Out[228]:
   a  b  c  a  b  c
0  4  2  0  2  3  2
1  0  0  3  2  1  1
2  4  0  4  4  4  3

但是,如果您需要更灵活的方法(尽管可能会慢一点),可以使用str.extract,它借助正则表达式的强大功能,允许您选择要保留列名的哪一部分

In [216]: df = pd.DataFrame({f'{c}_{i}': f() for i in range(3) for c in 'abc'})

In [217]: df
Out[217]:
   a_0  b_0  c_0  a_1  b_1  c_1  a_2  b_2  c_2
0    0    1    0    2    2    4    0    0    3
1    0    0    3    1    4    2    4    3    2
2    2    0    1    0    0    2    2    2    1

In [223]: df.columns = df.columns.str.extract(r'(.*)_\d+')[0]

In [224]: df
Out[224]:
0  a  b  c  a  b  c  a  b  c
0  1  1  0  0  0  2  1  1  2
1  1  0  1  0  1  2  0  4  1
2  1  3  1  3  4  2  0  1  1

使用df.columns.str的想法来自这个答案

戚成礼
2023-03-14

这个片段应该可以完成工作:

df.columns = pd.Index(map(lambda x : str(x)[:-2], df.columns))

编辑:这是一个更好的方法

df.rename(columns = lambda x : str(x)[:-2])

在这两种情况下,我们所做的只是遍历列并应用一些函数。在本例中,函数将某些内容转换为字符串,并在最后两个字符之前处理所有内容。

我相信还有其他一些方法可以做到这一点。

 类似资料:
  • 删除数据帧中的列时,我使用: 这工作很棒。为什么我不能用下面的? 因为可以以的方式访问列/Series,所以我希望这能起作用。

  • 问题内容: 我有一个SQL列,其中的条目是字符串。我需要在剪掉最后两个字符后显示这些条目,例如,如果该条目应输出。 我尝试研究TRIM,但看起来只有在我们知道最后两个字符是什么的情况下,它才能提供修剪功能。但就我而言,我不知道最后两个数字是什么,只需要丢弃它们即可。 简而言之,什么是MySQL字符串操作可以修剪字符串的最后两个字符? 我必须补充一点,字符串的长度不是固定的。它可以是9个字符,11个

  • 我有一个数据框('main'),大约有300列。我创建了一个较小的数据帧(“public”),并一直在致力于此。 现在我想从较大的数据框('main')中删除包含在'public'中的列。 我尝试了以下说明: http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.drop.html Python Pandas-在一个

  • 问题内容: 我有一个带有以下列名称的pandas数据框: Result1,Test1,Result2,Test2,Result3,Test3等… 我要删除名称包含单词“ Test”的所有列。这样的列数不是静态的,而是取决于先前的功能。 我怎样才能做到这一点? 问题答案:

  • 我已将Excel表格导入熊猫。它有7列数字和1列字符串(标志)。 帮助我从Pandas数据帧中删除列。

  • 问题内容: 我想开发一个只能从字符串中删除数字字符的mysql函数。 问题答案: 您可以编写用户定义的函数,在其中可以编写替换逻辑,也可以尝试: