我有一个很大的数据集,我想用1替换最后一列的值。
例如:
1,1,34
1,2,32
1,3,0
1,4,12
我需要能够将最后一列的值更改为大于0的值。
示例输出:
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]
以此类推。
但这显然不能涵盖整个数字范围
答案 0 :(得分:2)
您可能要使用更新后的值从现有的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)
您可以使用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)
lambda函数检查最后一列(-1
中的data.iloc[:, -1]
)中的值是否大于1,并在这种情况下将其替换为1。
这将创建输出:
1,1,1
1,2,1
1,3,0
1,4,1
答案 2 :(得分:1)
简单且不使用任何外部模块:
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:\Users\ShlomiF\Documents\new 3.txt", 'r').readlines()]
但这是反python-zen:-)
编辑:
写回文件只是逆转了上述内容:
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')
答案 3 :(得分: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