当值大于0时,如何替换csv文件的最后一列



我有一个大数据集,我想用1替换最后一列的值。

例如:

1,1,34
1,2,32
1,3,0
1,4,12

我需要能够将最后一列中的值更改为1,其中值大于0。

示例输出:

1,1,1
1,2,1
1,3,0
1,4,1

有人能帮忙吗?到目前为止,我已经能够替换最后一个字符,但无论值如何,我似乎都找不到如何替换整个列

【新增】

我已经试过了

lines = [line.replace("2n","1n") for line in lines]
lines = [line.replace("3n","1n") for line in lines]

等等。

但这并不能覆盖整个数字谱——显然是

您可能需要从具有更新值的现有csv创建一个新csv。示例代码如下。

import csv
with open(r'C:UsersguptaDesktopcsvfile.csv') as inputFile:
x = csv.reader(inputFile)
for lines in x:
if int(lines[-1]) > 0:
lines[-1] = 1
with open(r'C:UsersguptaDesktopcsvfile1.csv','a') as outFile:
iWrite = csv.writer(outFile, delimiter=' ')
iWrite.writerow(lines)

简单且不使用任何外部模块:

with open('/path/to/data.txt', 'r') as f:
data = [list(map(float, l.strip().split(',')))  for l in f.readlines()]
data = [x[:-1] + ([1] if x[-1] else [0]) for x in data]

可以制作成1行:

data = [list(map(float, l.strip().split(',')))[:-1] + ([1] if list(map(int, l.strip().split(',')))[-1] else [0]) for l in open(r"C:UsersShlomiFDocumentsnew 3.txt", 'r').readlines()]

但这是反蟒蛇禅:-(


编辑:
写回文件只是颠倒了上面的内容:

with open('/path/to/file/of/choice.txt', 'w') as f:  # Can be same file
for x in data:
f.write(','.join(list(map(str, x))) + 'n')

您可以使用regex:

import re

data = ["1,1,34",
"1,2,32",
"1,3,0",
"1,4,12"]
pattern = r"^([0-9]+,[0-9]+),(?:[2-9]|ddd*)$"
for line in data:
if re.match(pattern, line):
line = re.sub(pattern, r"1,1", line)
print(line)

输出:

1,1,1
1,2,1
1,3,0
1,4,1

您可以使用panda和lambda函数。

import pandas as pd
data = pd.read_csv(<your csv>, headers=None)
data.iloc[:, -1] = data.iloc[:, -1].apply([lambda x: x if x <= 1 else 1])
data.to_csv(<your csv>, index=False, header=False)

lambda函数检查最后一列中的值(data.iloc[:, -1]中的-1(是否大于1,如果是这样,则将其替换为1。

这将创建输出:

1,1,1
1,2,1
1,3,0
1,4,1

最新更新