相关疑难解决方法(0)

替换部分匹配字符串的 Pandas 数据框中的列名

背景

我想识别数据框中与字符串部分匹配的列名称,并将它们替换为原始名称以及添加到其中的一些新元素。新元素是由列表定义的整数。这是一个类似的问题,但恐怕建议的解决方案在我的特定情况下不够灵活。而这里是另一篇文章与接近我所面临的问题的一些优秀的答案。

有些研究

我知道我可以组合两个字符串列表,将它们成对映射到字典中,并 使用字典作为函数中的输入重命名列df.rename。但这似乎有点太复杂了,而且考虑到现有列的数量会有所不同,这不是很灵活。要重命名的列数也是如此。

以下代码段将生成一个输入示例:

# Libraries
import numpy as np
import pandas as pd
import itertools

# A dataframe
Observations = 5
Columns = 5
np.random.seed(123)
df = pd.DataFrame(np.random.randint(90,110,size=(Observations, Columns)),
              columns = ['Price','obs_1','obs_2','obs_3','obs_4'])

datelist = pd.date_range(pd.datetime.today().strftime('%Y-%m-%d'),
                     periods=Observations).tolist()
df['Dates'] = datelist
df = df.set_index(['Dates'])
print(df)
Run Code Online (Sandbox Code Playgroud)

输入

在此处输入图片说明

我想识别以 开头的列名obs_,并newElements = [5, 10, 15, 20]=符号后面的列表中添加元素(整数)。命名的列Price保持不变。列之后出现的其他列obs_也应保持不变。

以下代码段将演示所需的输出:

# Desired output
Observations = 5 …
Run Code Online (Sandbox Code Playgroud)

python dictionary dataframe python-3.x pandas

5
推荐指数
1
解决办法
4392
查看次数

将列标题添加到新的pandas数据帧

我正在使用.groupby.size方法从之前的数据框架创建一个新的pandas数据框.

[in] results = df.groupby(["X", "Y", "Z", "F"]).size()

[out]
    9   27/02/2016  1   N   326
    9   27/02/2016  1   S   332
    9   27/02/2016  2   N   280
    9   27/02/2016  2   S   353
    9   27/02/2016  3   N   177
Run Code Online (Sandbox Code Playgroud)

这表现得如预期,但结果是没有列标题的数据帧.

SO问题表明以下内容将列名添加到生成的数据帧中

[in] results.columns = ["X","Y","Z","F","Count"]
Run Code Online (Sandbox Code Playgroud)

但是,这似乎没有任何影响.

[out]
        9   27/02/2016  1   N   326
        9   27/02/2016  1   S   332
        9   27/02/2016  2   N   280
        9   27/02/2016  2   S   353
        9   27/02/2016  3   N   177
Run Code Online (Sandbox Code Playgroud)

python pandas

4
推荐指数
1
解决办法
2133
查看次数

python pandas以相同的方式重命名多个列标题

考虑一个简单的df:

HeaderA | HeaderB | HeaderC 
    476      4365      457
Run Code Online (Sandbox Code Playgroud)

有没有办法重命名所有列,例如最后添加到所有列的"X"?

HeaderAX | HeaderBX | HeaderCX 
    476      4365      457
Run Code Online (Sandbox Code Playgroud)

我正在连接多个数据帧,并希望根据它们来自哪个数据集轻松区分列.

或者这是唯一的方法吗?

df.rename(columns={'HeaderA': 'HeaderAX'}, inplace=True)
Run Code Online (Sandbox Code Playgroud)

我有超过50个列标题和10个文件; 所以上述方法需要很长时间.

谢谢

python rename header pandas

4
推荐指数
1
解决办法
2703
查看次数

更改链式操作中的所有列名

我有一个数据框:

df = pd.DataFrame(data=[[1,2]], columns=['a', 'b'])
Run Code Online (Sandbox Code Playgroud)

我知道我可以执行以下操作来更改数据框中的所有列名称:

df.columns = ['d', 'e']
Run Code Online (Sandbox Code Playgroud)

如何更改链式操作中的所有列名?例如,我想做这样的事情:

df=(
    df.rename all column names
    .reset_index()
)
Run Code Online (Sandbox Code Playgroud)

我能找到的唯一方法是使用df.rename和构建一个包含新旧列对的字典,但这看起来非常难看。有没有更优雅的解决方案?

谢谢。

python pandas

4
推荐指数
1
解决办法
570
查看次数

使用正则表达式重命名pandas数据框中的列

   Y2010  Y2011  Y2012  Y2013  test
0  86574  77806  93476  99626  2
1  60954  67873  65135  64418  4
2    156    575    280    330  6
3   1435   1360   1406   1956  7
4   3818   7700   6900   5500  8
Run Code Online (Sandbox Code Playgroud)

有没有办法将此数据框的列从Y2010 ...重命名为2010 ..即删除初始的'Y'.我想使用正则表达式,因为我有很多这样的列.我试过这个:

df.rename(df.filter(regex='^Y\d{4}').columns.values, range(2010, 2013 + 1, 1))
Run Code Online (Sandbox Code Playgroud)

--EDIT:数据帧的包含不以'Y'开头的列

python pandas

3
推荐指数
1
解决办法
3241
查看次数

使用for循环重命名熊猫数据框列

我不确定这是否是愚蠢的方法,但是我有几个数据帧,所有数据帧都有相同的列。我需要重命名每个列中的列以反映每个数据框的名称(此后,我将对所有这些列进行外部合并)。

比方说,数据帧被称为df1df2并且df3,每个包含列namedatecount

我想每一列重命名df1name_df1date_df1count_df1

我编写了一个函数来重命名列,因此:

df_list=[df1, df2, df3]

def rename_cols():
    col_name="name"+suffix
    col_count="count"+suffix
    col_date="date"+suffix

for x in df_list:
    if x['name'].tail(1).item() == df1['name'].tail(1).item():
        suffix="_"+"df1"
        rename_cols()
        continue
    elif x['name'].tail(1).item() == df2['name'].tail(1).item():
        suffix="_"+"df2"
        rename_cols()
        continue
    else:
        suffix="_"+"df3"
        rename_cols()

    col_names=[col_name,col_date,col_count]
    x.columns=col_names
Run Code Online (Sandbox Code Playgroud)

不幸的是,我收到以下错误: KeyError: 'name'

我真的很难弄清楚为什么会这样。df1的列(的第一个数据帧df_list)被重命名。其他所有内容都保持不变...我是在搞乱基本语法(可能是),还是我对事情应该如何工作有根本的误解?

据我所知,列表中的第一个数据帧将不止一次地迭代-但是为什么会这样呢?

python pandas

3
推荐指数
2
解决办法
1万
查看次数

使用字符串和数字生成列名称

非常基本的问题:当我想获得 20 个名称为 s1、s2、s3、...、s20 的列时,为 pandas 数据框生成一组列名称的最简单方法(最少代码)是什么?

python dataframe pandas

3
推荐指数
1
解决办法
3047
查看次数

在 pandas 数据框中与多个列交换或交换列名称

我想仅交换(交换)pandas 中的列名,最好使用单行。另一个问题是我有大约 100 列,这导致我无法重新分配所有列名称,因此我想替换成对的选定列名称。我不知道列的索引(它会有所不同),所以我必须使用列名。

我尝试了以下代码:

import pandas as pd

probes = {'Spam': [0.0,1.0],
        'Ham': [1.0,0.0],
        'PT011': [0.11,0.21],
        'PT012': [0.12,0.22],
        'PT021': [0.21,0.11],
        'PT022': [0.22,0.12]}

df = pd.DataFrame(probes,columns= ['Spam','Ham','PT011', 'PT012','PT021','PT022'])
print("Before renaming:\n",df)
df.rename(columns={'PT011':'PT021', 'PT012':'PT022','PT021':'PT011','PT022':'PT012'}, inplace=True)
print("After renaming:\n",df)
Run Code Online (Sandbox Code Playgroud)

我得到了:

Before renaming:
    Spam  Ham  PT011  PT012  PT021  PT022
0   0.0  1.0   0.11   0.12   0.21   0.22
1   1.0  0.0   0.21   0.22   0.11   0.12
After renaming:
    Spam  Ham  PT021  PT022  PT011  PT012
0   0.0  1.0   0.11   0.12   0.21   0.22
1   1.0  0.0   0.21   0.22   0.11   0.12 …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

3
推荐指数
1
解决办法
7727
查看次数

在 Pandas 中按列号更改多个列名?

我从这里借用这个例子。我有一个这样的数据框:

# Import pandas package 
import pandas as pd 
   
# Define a dictionary containing ICC rankings 
rankings = {'test': ['India', 'South Africa', 'England', 
                            'New Zealand', 'Australia'], 
              'odi': ['England', 'India', 'New Zealand', 
                            'South Africa', 'Pakistan'], 
               't20': ['Pakistan', 'India', 'Australia', 
                              'England', 'New Zealand']} 
   
# Convert the dictionary into DataFrame 
rankings_pd = pd.DataFrame(rankings) 
   
# Before renaming the columns 
print(rankings_pd)
          test           odi          t20
0         India       England     Pakistan
1  South Africa         India        India
2       England   New Zealand    Australia
3   New Zealand  South Africa …
Run Code Online (Sandbox Code Playgroud)

python pandas

3
推荐指数
1
解决办法
146
查看次数

如何自动重命名 Pandas 中的列?

我有一个包含 240 列的 Dataframe。但它们是以 0 到 239 之间的数字命名的。

如何自动将其重命名为“column_1”、“column_2”、........、“column_239”、“column_240”? 在此输入图像描述

python pandas

2
推荐指数
1
解决办法
613
查看次数

标签 统计

pandas ×10

python ×10

dataframe ×3

dictionary ×1

header ×1

python-3.x ×1

rename ×1