将一个列表中的两个数字划分为Pandas Series / Column

时间:2018-05-30 15:40:18

标签: python pandas

0    [1, 39]
1    [1, 39]
2    [1, 39]
3    [2, 39]
4    [4, 39]

所以我开始的是每一行中的一小部分,我把它分成了一个带有数字字符串的列表。我想简单地划分这些并在每一行留下一个浮点数。我现在在哪里:

t.apply(lambda x: float(t[0][0])/float(t[0][1]))

0    0.025641
1    0.025641
2    0.025641
3    0.025641
4    0.025641

这肯定感觉有一个更好的方法来做这个比使用这个方法并循环整个数据集,但这就是我难倒的地方!另一件需要考虑的事情是,本专栏中也有NaN。非常感谢任何帮助!

感谢所有回复的人。最终做到这一点的解决方案是:

df ['INTRON'] = df['INTRON'].str.split('/').str[0].astype('float64') / df['INTRON'].str.split('/').str[1].astype('float64')

2 个答案:

答案 0 :(得分:2)

使用str

df.str[0]/df.str[1]
Out[403]: 
0    0.025641
1    0.025641
dtype: float64

答案 1 :(得分:1)

IIUC,您从一开始就跟随数据帧开始:

import pandas as pd
import numpy as np

df = pd.DataFrame({'t':['1/39','1/39','1/39','2/39','4/39', np.NaN, '5/39']})
print(df)

结果:

      t
0  1/39
1  1/39
2  1/39
3  2/39
4  4/39
5   NaN
6  5/39

然后,您希望在/上拆分,并且列中有NaN个值。您可以尝试按照以下步骤创建新列:

df['result'] = df.t.str.split('/').dropna().apply(lambda x: float(x[0])/float(x[1]))
print(df)

结果:

      t    result
0  1/39  0.025641
1  1/39  0.025641
2  1/39  0.025641
3  2/39  0.051282
4  4/39  0.102564
5   NaN       NaN
6  5/39  0.128205