【问题标题】:Splitting a column by delimiter pandas python and keeping only the new names通过分隔符 pandas python 拆分列并仅保留新名称
【发布时间】:2019-10-22 01:26:15
【问题描述】:

我想扩展这个问题:splitting a column by delimiter pandas python

import pandas as pd

df = {'V': ['IGHV7-B*01','IGHV7-B*01','IGHV6-A*01','GHV6-A*01','IGHV6-A*01','IGHV6-A*01','IGHV4- L*03','IGHV4-L*03','IGHV5-A*01','IGHV5-A*04','IGHV6-A*02','IGHV6-A*02']}

现在,我只想保留新名称:

df[['Name','allele']] = df['V'].str.split('-',expand=True)

但 df 也存储“V”:

df 

    V           Name    allele
0   IGHV7-B*01  IGHV7   B*01
1   IGHV7-B*01  IGHV7   B*01

... 有没有方便的钥匙来做到这一点? 我知道我能做到:

df.drop(columns='V', axis=1, inplace=True)

我更喜欢一个键而不是另一行代码,因为在我的项目中,我必须多次重复同样的事情,我总共有 25 个名字。

【问题讨论】:

标签: python pandas dataframe split


【解决方案1】:

您可以创建一个新的数据框并使用DataFrame.rename:

new_df=df['V'].str.split('-',expand=True).rename(columns={0:'Name',1:'Allete'})
print(new_df)

     Name allele
0   IGHV7   B*01
1   IGHV7   B*01
2   IGHV6   A*01
3    GHV6   A*01
4   IGHV6   A*01
5   IGHV6   A*01
6   IGHV4   L*03
7   IGHV4   L*03
8   IGHV5   A*01
9   IGHV5   A*04
10  IGHV6   A*02
11  IGHV6   A*02

如果您不想创建新的数据框,而您想要将其保存在原始数据框中并在一行中删除“V”,您可以使用pd.concat

df=pd.concat([df.loc[:,~df.columns.isin(['V','allete','Name'])],df['V'].str.split('-',expand=True).rename(columns={0:'Name',1:'allele'})],axis=1)

【讨论】:

  • 好主意!就我而言,我想避免再次指定名称,因为我有 25 个。
  • 你的名字是什么意思?
  • 我的意思是那些:columns={0:'Name',1:'allele'}
  • 如果您将数据保存在已创建的列中,则必须指定保存它的列的标签。因此,您将不得不编写它。就像您在问题中显示的那样。同样,如果您创建新列,则必须指定名称。换句话说,如果您希望列以某种方式具有该名称,则必须指定它。您是否要将此操作应用于比 V 更多的列?
  • “问题”是我以这种格式保存它:problem = { 'num_vars': 25, 'names': ['Name1', 'Name2', '...], '边界': [[1, 2],[...]] }
猜你喜欢
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 2020-11-01
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
相关资源
最近更新 更多