将数据框列转换为float并在Pandas中执行操作

时间:2014-10-28 20:21:57

标签: python-2.7 pandas

我有一个数据框,其中包含以字符串

导入的以下内容
df3 = pd.DataFrame(data = {
                       'Column1':['10/1','9/5','7/4','12/3','18/7','14/2']})

我试图转换为浮动并进行划分。以下确实运作良好。

for i, v in enumerate(df3.Column1):
    df3['Column2'] = float(v[:-2]) / float(v[-1])
    print df3.Column2

这是我想要实现的输出

df3 = pd.DataFrame(data = {
                       'Column1':['10/1','9/5','7/4','12/3','18/7','14/2'],
                       'Column2':['10.0','1.8','1.75','4.0','2.57142857143','7.0']})
df3

2 个答案:

答案 0 :(得分:2)

以下方法可行,定义一个函数来执行浮动并返回它,其结果应该分配给新列:

In [10]:

df3 = pd.DataFrame(data = {
                       'Column1':['10/1','9/5','7/4','12/3','18/7','14/2']})
def func(x):
    return float(x[:-2]) / float(x[-1])

df3['Column2'] = df3['Column1'].apply(func)
df3
Out[10]:
  Column1    Column2
0    10/1  10.000000
1     9/5   1.800000
2     7/4   1.750000
3    12/3   4.000000
4    18/7   2.571429
5    14/2   7.000000

答案 1 :(得分:0)

如果,并且只是如果您没有来自不受信任来源的输入/数据,这里有一条捷径:

In [46]: df3
Out[46]:
  Column1
0    10/1
1     9/5
2     7/4
3    12/3
4    18/7
5    14/2

In [47]: df3.Column1.map(eval)
Out[47]:
0    10.000000
1     1.800000
2     1.750000
3     4.000000
4     2.571429
5     7.000000
Name: Column1, dtype: float64

但严重的是......小心eval。 Good old Bobby Tables