我有一个包含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
对浮点值不起作用。
答案 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