2

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 には、「<」で始まる float 値と「<」を含まない float 値があります。

前に「<」がある行については、それを切り取り、「=」記号の前の列 C に移動します。

どうすればいいのですか?

通常のスライスを使用すると、「<」記号のない値がカットされます。

またstartswith、浮動小数点値では機能しません。

4

2 に答える 2

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)
于 2013-01-07T13:53:26.880 に答える
0

列のエントリを受け取り、df.Dシリーズを返す関数を作成できます。apply次に、この関数でSeries を使用できます。

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
于 2013-01-07T14:10:57.290 に答える