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

Python 当值大于0时,如何替换csv文件的最后一列,python,csv,replace,dataset,Python,Csv,Replace,Dataset,我有一个很大的数据集,我想用1替换最后一列的值 例如: 1,1,34 1,2,32 1,3,0 1,4,12 我需要能够将最后一列中的值更改为大于0的1 示例输出: 1,1,1 1,2,1 1,3,0 1,4,1 有人能帮忙吗? 到目前为止,我已经能够替换最后一个字符,但我似乎无法找到如何替换整个列,无论值是多少 [补充] 我已经试过这个了 lines = [line.replace("2\n","1\n") for line in lines] lines = [line.replace(

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

例如:

1,1,34
1,2,32
1,3,0
1,4,12
我需要能够将最后一列中的值更改为大于0的1

示例输出:

1,1,1
1,2,1
1,3,0
1,4,1
有人能帮忙吗? 到目前为止,我已经能够替换最后一个字符,但我似乎无法找到如何替换整个列,无论值是多少

[补充]

我已经试过这个了

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


但是这并不能覆盖整个数字范围,显然你可以使用pandas和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)

您可以使用pandas和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)

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

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-liner:

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:\Users\ShlomiF\Documents\new 3.txt", 'r').readlines()]
但这是反python的禅:-)


编辑:
写回文件只是颠倒了上述情况:

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')

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

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-liner:

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:\Users\ShlomiF\Documents\new 3.txt", 'r').readlines()]
但这是反python的禅:-)


编辑:
写回文件只是颠倒了上述情况:

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')

您可以使用正则表达式:

import re


data = ["1,1,34",
        "1,2,32",
        "1,3,0",
        "1,4,12"]

pattern = r"^([0-9]+,[0-9]+),(?:[2-9]|\d\d\d*)$"

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

您可以使用正则表达式:

import re


data = ["1,1,34",
        "1,2,32",
        "1,3,0",
        "1,4,12"]

pattern = r"^([0-9]+,[0-9]+),(?:[2-9]|\d\d\d*)$"

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

您可能希望使用更新的值从现有csv创建新的csv。 下面是示例代码

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

您可能希望使用更新的值从现有csv创建新的csv。 下面是示例代码

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

请提供您尝试过的代码。此外,我不知道最大可能值是什么,因此我没有尝试编写循环请提供您尝试过的代码。此外,我不知道最大可能值是什么,因此我没有尝试编写循环。这会创建类似于以下内容的输出:1,1,1,2,1,2,3,1,3,4,1,4,因此,它几乎最终命名了列,并删除了最后一列:/I进行了编辑。这明确表示CSV-output中没有标题并删除了索引。但我不明白为什么它会像您所说的那样删除最后一列。当我运行它时,它不会这样做……这会创建一个类似于以下内容的输出:1,1,1,2,2,3,1,3,4,1,4,所以它几乎会命名列并删除最后一列:/I进行了编辑。这明确表示CSV-output中没有标题并删除了索引。但我不明白为什么它会像您所说的那样删除最后一列。当我运行它时,它不会这样做…它工作了!必须用float替换int,否则我会出错。谢谢DGlad我可以帮助:-)要保存新文件吗?我现在要补充一点,它成功了!必须用float替换int,否则我会出错。谢谢DGlad我可以帮助:-)要保存新文件吗?我现在要补充一点。