使用Python从DataFrame中的列拆分值

时间:2013-01-07 13:35:40

标签: python numpy python-2.7 dataframe pandas

我有一个包含4列的数据框..

A    B     C      D
e    2     =     <0.1
e    2     =     <0.11
e    2     =      0.1
e    2     =      0.1
e    2     =      0.1
e    2     =     <0.14

D列有一些以'&lt;'开头的浮点值有些没有'&lt;'。

对于具有'&lt;'的行在前面我想切割它并在'='符号前移动到C列。

我该怎么做?

如果我使用普通切片,它会在没有'&lt;'的地方切割值登录。

并且startswith对浮点值不起作用。

2 个答案:

答案 0 :(得分:0)

如果我理解正确的话,

这样的事情应该这样做。这是非常快速和肮脏的,未经测试。读取命名文件,打印到stdout:

for l in open("file.txt").readlines():
  l = l.strip()
  fields = l.split(" ")
  if len(fields) != 4: continue
  if fields[3][0] == "<":
    fields[2] = "<"
    fields[3] = fields[3][1:]
  print "\t".join(fields)

答案 1 :(得分:0)

您可以创建一个函数,该函数在df.D列中输入一个并返回一个Series。然后,您可以将apply系列与此函数一起使用:

def f(d):
    try:
        if d[0] == '<':
            return pd.Series(['<=', float(d[1:])])
    except TypeError:
        return pd.Series(['==', d])

In [9]: df = DataFrame({'A': {0: 'e', 1: 'e', 2: 'e', 3: 'e', 4: 'e', 5: 'e'}, 'B': {0: 2, 1: 2, 2: 2, 3: 2, 4: 2, 5: 2}, 'C': {0: '=', 1: '=', 2: '=', 3: '=', 4: '=', 5: '='}, 'D': {0: '<0.1', 1: '<0.11', 2: 0.1, 3: 0.1, 4: 0.1, 5: '<0.14'}})

In [10]: df
Out[10]: 
   A  B  C      D
0  e  2  =   <0.1
1  e  2  =  <0.11
2  e  2  =    0.1
3  e  2  =    0.1
4  e  2  =    0.1
5  e  2  =  <0.14

In [11]: df[['C', 'D']] = df.D.apply(f)

In [12]: df
Out[12]: 
   A  B   C     D
0  e  2  <=   0.1
1  e  2  <=  0.11
2  e  2  ==   0.1
3  e  2  ==   0.1
4  e  2  ==   0.1
5  e  2  <=  0.14