Pandas 转换数据场中整列的值

Pandas 转换数据场中整列的值,pandas,dataframe,Pandas,Dataframe,我有以下数据帧: chr start_position end_position gene_name 0 Chr Position Ref Gene_Name 1 chr22 24128945 G nan 2 chr19 45867080 G ERCC2 3

我有以下数据帧:

         chr start_position        end_position  gene_name
0        Chr       Position                 Ref  Gene_Name
1      chr22       24128945                   G        nan
2      chr19       45867080                   G      ERCC2
3       chr3       52436341                   C       BAP1
4       chr7      151875065                   G      KMT2C
5      chr19        1206633               CGGGT      STK11
我想将整个“结束位置”列转换为包含“开始位置”+len(“结束位置”)的值,结果应该是:

     chr start_position        end_position  gene_name
0        Chr       Position                 Ref  Gene_Name
1      chr22       24128945            24128946       nan
2      chr19       45867080            45867081      ERCC2
3       chr3       52436341            52436342       BAP1
4       chr7      151875065           151875066      KMT2C
5      chr19        1206633             1206638      STK11
我写了以下脚本:

patient_vcf_to_df.apply(pd.to_numeric, errors='ignore')
patient_vcf_to_df['end_position'] = patient_vcf_to_df['end_position'].map(lambda x: patient_vcf_to_df['start_position'] + len(x))
但我得到了一个错误: TypeError:必须是str,而不是int

有人知道我如何解决这个问题吗


非常感谢

首先,我读取您的CSV的方式是,
0
行将成为标题(列名):

要获得以下DF:

     Chr   Position    Ref Gene_Name
0  chr22   24128945      G       NaN
1  chr19   45867080      G     ERCC2
2   chr3   52436341      C      BAP1
3   chr7  151875065      G     KMT2C
4  chr19    1206633  CGGGT     STK11
作为积极的副作用:

In [99]: df.dtypes
Out[99]:
chr          object
position      int64        # <--- NOTE
ref          object
gene_name    object
dtype: object
要确保
position
列为数字数据类型,请执行以下操作:

df['position'] = pd.to_numeric(df['position'], errors='coerce')
然后:

In [101]: df['end_position'] = df['position'] + df['ref'].str.len()

In [102]: df
Out[102]:
     chr   position    ref gene_name  end_position
0  chr22   24128945      G       NaN      24128946
1  chr19   45867080      G     ERCC2      45867081
2   chr3   52436341      C      BAP1      52436342
3   chr7  151875065      G     KMT2C     151875066
4  chr19    1206633  CGGGT     STK11       1206638

为什么我得到
TypeError:ufunc'add'没有包含签名类型匹配的循环dtype('@pyd,在您的情况下,
position
列很可能有string(
object
)dtype…是的,如何转换that@cᴏʟᴅsᴘᴇᴇᴅ, 谢谢!:)圣诞快乐,新年快乐!:-)@Bella,
errors='ignore'
-忽略那些无法转换为数字的值,因此,如果列中至少有一个这样的值,则您将拥有数据类型:
object
。。。
df['position'] = pd.to_numeric(df['position'], errors='coerce')
In [101]: df['end_position'] = df['position'] + df['ref'].str.len()

In [102]: df
Out[102]:
     chr   position    ref gene_name  end_position
0  chr22   24128945      G       NaN      24128946
1  chr19   45867080      G     ERCC2      45867081
2   chr3   52436341      C      BAP1      52436342
3   chr7  151875065      G     KMT2C     151875066
4  chr19    1206633  CGGGT     STK11       1206638