使用行的字符串名称中包含的元素重命名数据框行
Renaming dataframe rows with element contained in string name of the row
我有这个 DataFrame
,不幸的是行名包含整数和字符串,例如“20210902_Rene_Nicole_OC2012A_Sample_0087_20uLinject_01”。我想重命名行以仅包含样本编号,上面的示例将变为“0087”。
df=pd.DataFrame([['20210902_Rene_Nicole_OC2012A_Sample_0087_20uLinject_01',2.233,7.84554,10.222],['20210902_Rene_Nicole_OC2012A_Sample_0097_20uLinject_01',2.000,7.8666,10.000],['20210902_Rene_Nicole_OC2012A_Sample_0098_20uLinject_01',2.230,7.8500,10.005]],columns=('786.2323','800.3231','832.5699','850.0022'))
这将创建以下 DataFrame
:
所需的输出如下所示 DataFrame
:
我尝试转置数据框,目的是重命名列,然后在最后转回,并使用 str.replace 函数编辑列名,但我认为存在问题,因为列名同时包含整数和字符串,它们会改变。如果这有效,我会再次删除示例名称“_20uLinject_01”,尽管我想知道是否有更好的方法来执行此操作。
df.transpose()
df.columns = df.columns.str.replace('20210902_Rene_Nicole_OC2012A_Sample_', '')
#returns error: "AttributeError: Can only use .str accessor with string values!"
有什么想法可以解决这个问题吗?我有大约 180 行要重命名,所以循环遍历或者不必为每一行手动执行它会很棒。谢谢!
只需使用.str.split("_").str[<index>]
。代码如下:
>>> df["786.2323"] = df["786.2323"].str.split("_").str[5]
>>> df
786.2323 800.3231 832.5699 850.0022
0 0087 2.233 7.84554 10.222
1 0097 2.000 7.86660 10.000
2 0098 2.230 7.85000 10.005
这里索引5对应你需要的值
我有这个 DataFrame
,不幸的是行名包含整数和字符串,例如“20210902_Rene_Nicole_OC2012A_Sample_0087_20uLinject_01”。我想重命名行以仅包含样本编号,上面的示例将变为“0087”。
df=pd.DataFrame([['20210902_Rene_Nicole_OC2012A_Sample_0087_20uLinject_01',2.233,7.84554,10.222],['20210902_Rene_Nicole_OC2012A_Sample_0097_20uLinject_01',2.000,7.8666,10.000],['20210902_Rene_Nicole_OC2012A_Sample_0098_20uLinject_01',2.230,7.8500,10.005]],columns=('786.2323','800.3231','832.5699','850.0022'))
这将创建以下 DataFrame
:
所需的输出如下所示 DataFrame
:
我尝试转置数据框,目的是重命名列,然后在最后转回,并使用 str.replace 函数编辑列名,但我认为存在问题,因为列名同时包含整数和字符串,它们会改变。如果这有效,我会再次删除示例名称“_20uLinject_01”,尽管我想知道是否有更好的方法来执行此操作。
df.transpose()
df.columns = df.columns.str.replace('20210902_Rene_Nicole_OC2012A_Sample_', '')
#returns error: "AttributeError: Can only use .str accessor with string values!"
有什么想法可以解决这个问题吗?我有大约 180 行要重命名,所以循环遍历或者不必为每一行手动执行它会很棒。谢谢!
只需使用.str.split("_").str[<index>]
。代码如下:
>>> df["786.2323"] = df["786.2323"].str.split("_").str[5]
>>> df
786.2323 800.3231 832.5699 850.0022
0 0087 2.233 7.84554 10.222
1 0097 2.000 7.86660 10.000
2 0098 2.230 7.85000 10.005
这里索引5对应你需要的值