通过列表迭代重命名数据帧

2024-09-25 12:36:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了我的熊猫列表,如下所示:

id=[f'GeneID_region_{i}' for i in range(43)]
value=[f'GeneValue_region_{i}' for i in range(43)]


lst=[]
for i in range(43):
    lst.append(id[i])
    lst.append(value[i])



df=pd.DataFrame(index=lst).T

现在看起来像:df(0,86)

Empty DataFrame
Columns: [GeneID_region_0, GeneValue_region_0, GeneID_region_1, GeneValue_region_1, GeneID_region_2, GeneValue_region_2, GeneID_region_3, GeneValue_region_3, GeneID_region_4, GeneValue_region_4, GeneID_region_5, GeneValue_region_5, GeneID_region_6, GeneValue_region_6, GeneID_region_7, GeneValue_region_7, GeneID_region_8, GeneValue_region_8, GeneID_region_9, GeneValue_region_9, GeneID_region_10, GeneValue_region_10, GeneID_region_11, GeneValue_region_11, GeneID_region_12, GeneValue_region_12, GeneID_region_13, GeneValue_region_13, GeneID_region_14, GeneValue_region_14, GeneID_region_15, GeneValue_region_15, GeneID_region_16, GeneValue_region_16, GeneID_region_17, GeneValue_region_17, GeneID_region_18, GeneValue_region_18, GeneID_region_19, GeneValue_region_19, GeneID_region_20, GeneValue_region_20, GeneID_region_21, GeneValue_region_21, GeneID_region_22, GeneValue_region_22, GeneID_region_23, GeneValue_region_23, GeneID_region_24, GeneValue_region_24, GeneID_region_25, GeneValue_region_25, GeneID_region_26, GeneValue_region_26, GeneID_region_27, GeneValue_region_27, GeneID_region_28, GeneValue_region_28, GeneID_region_29, GeneValue_region_29, GeneID_region_30, GeneValue_region_30, GeneID_region_31, GeneValue_region_31, GeneID_region_32, GeneValue_region_32, GeneID_region_33, GeneValue_region_33, GeneID_region_34, GeneValue_region_34, GeneID_region_35, GeneValue_region_35, GeneID_region_36, GeneValue_region_36, GeneID_region_37, GeneValue_region_37, GeneID_region_38, GeneValue_region_38, GeneID_region_39, GeneValue_region_39, GeneID_region_40, GeneValue_region_40, GeneID_region_41, GeneValue_region_41, GeneID_region_42, GeneValue_region_42]
Index: []

[0 rows x 86 columns]

在我对df做了一些处理之后,我想替换列名

我正在读取一个包含名称的文本文件,我想使用该文件:

with open('/home/anja/Schreibtisch/Master/ABA/layer2_names.txt') as f:
    layernames = [line.strip() for line in f.read().split('\n')]

现在我试着这样做:

df.rename(columns={[f'GeneID_region_{i}' for i in range(43)]: ['GeneID_region_{i}' for i in layernames]}, inplace=True)

但这给了我 &燃气轮机; TypeError:不可损坏的类型:“列表”

有人能解决这个问题吗


Tags: columnsiniddataframedf列表forvalue
1条回答
网友
1楼 · 发布于 2024-09-25 12:36:22

您没有以正确的方式创建词典。这只是尝试创建一个字典,使用两个列表作为唯一的keyvalue,这会给您一个错误,因为列表是不可散列的。您可以在此处使用zip来交错其项并然后构建字典:

d = dict(zip([f'GeneID_region_{i}' for i in range(43)],
             [f'GeneID_region_{i}' for i in layernames]))
df.rename(columns=d, inplace=True)

或者,您也可以使用:

df.columns = df.columns.str.rsplit('_',1).str[0].str.cat(layernames,sep='_')

相关问题 更多 >