使用 Pandas 在 CSV 文件的特定位置添加多列

Adding Multiple Columns at Specific Locations in CSV file using Pandas

我试图在名称以特定文本开头的列之前放置多个列(Score1、Score2、Score3 等),例如:确定性。

我可以使用以下方法在固定位置插入列:

df.insert(17, "Score1", " ")

添加一列然后更改列顺序,因此我将不得不查看下一列的位置。我可以将空白列列表添加到 CSV 的末尾。

基本上,我的理解是我必须 pandas 才能阅读专栏 header。如果 header 文本以 "Certainty" 开头,则在它前面放置一个名为 Score1 的列。

我尝试使用:

df.insert(df.filter(regex='Certainty').columns, "Score", " ")

然而,可以猜到它不起作用。

据我了解,pandas 在迭代方法方面效率不高?我在这里被误导了吗?

写这个也让我认为它需要一个计数器来计算 Score1、2、3。

如有任何建议,我们将不胜感激!

提前致谢。

更新------基于提供的反馈

使用@SergeBallesta 的方法有效。

cur=0
for i, col in enumerate(df.columns):
    if col.startswith('Certainty'):
        df.insert(i+cur, f'Score{cur + 1}', '')
        cur += 1

使用@JacoSolari 的方法 我需要进行修改以允许它找到所有以 "Certainty" 开头的列。并且还需要自动添加Score1、Score2、Score3。

版本 1:这只会在正确的位置添加 Score1,然后不会添加任何其他内容

counter=0
certcol = df.columns[df.columns.str.contains('Certainty')]
col_idx = df.columns.get_loc(certcol[0])
col_names = [f'Score{counter + 1}']
[df.insert(col_idx, col_name, ' ') 
for col_name in col_names[::-1]]

版本 2:将 Score1 添加到正确的位置,然后将其余部分添加到第一个 "Certainty" 列之后。所以它不会继续寻找下一个。也许它在某处需要一个 for 循环?

cur=0
certcol = df.columns[df.columns.str.contains('Certainty')]
for col in enumerate(certcol):
    col_idx = df.columns.get_loc(certcol[0])
    df.insert(cur+col_idx, f'Score{cur + 1}', '')
    cur += 1

我已经发布了这个,以防有人遇到同样的需求。

您将不得不遍历列。它的性能不如 numpy 向量化访问,但有时您别无选择:

在这里我会做:

cur = 0
for i, col in enumerate(df.columns):
    if col.startswith('Certainty')
        df.insert(i+cur, f'Score{cur + 1}', '')
        cur += 1

您可以像这样找到 Certainty 列的位置

col_idx = df.columns.get_loc('Certainty')

然后您可以像这样在每个新列和数据(这里只是空字符串,如您的示例)中添加一个 for 循环

col_names = ['1', '2', '3']
[df.insert(col_idx, col_name, '') for col_name in col_names[::-1]]

因此只要添加新列的反向([::-1])列表就不需要更新列索引。 如果您还没有,也可以看看 问题。