用于替换csv文件中列的整个值的Python 2.7代码

时间:2017-03-28 11:11:58

标签: python python-2.7 csv pandas filewriter

我有一个从带有标题的csv文件中的SQL服务器导入的数据。

我想在python2.7中编写一个**代码,它可以读取一个csv文件并将其重新写入新的csv文件中,在该文件中我们使用正则表达式掩盖了最后2列,如#SEC; SECRET VALUE& #39;

CSV的示例输入:

ID,Name,city,SSN,CreditCardNo
1,Joy,London,123-465-456,123456789087645
2,Sam,NewYork,765-465-457,98765434567345
3,Jhon,Paris,678-365-654,765654542345677
4,Eric,Delhi,456-888-999,123456789087645

预期的样本输出:

ID,Name,city,SSN,CreditCardNo
1,Joy,London,SECRET VALUE,SECRET VALUE
2,Sam,NewYork,SECRET VALUE,SECRET VALUE
3,Jhon,Paris,SECRET VALUE,SECRET VALUE
4,Eric,Delhi,SECRET VALUE,SECRET VALUE

我的尝试:

import sys
import csv

r = csv.reader(open('C:\\Users\\Praveen\\workspace\\sampleFiles\\test1.csv'))
lines = [l for l in r]

lines[2][2] = '30'

writer = csv.writer(open('C:\\Users\\Praveen\\workspace\\sampleFiles\\test4.csv', 'wb'))
writer.writerows(lines)

这只会改变一个元素,我希望整个列被屏蔽。

1 个答案:

答案 0 :(得分:0)

我认为您首先需要read_csv,然后用iloc替换值,最后按DataFrame.to_csv写入文件:

import pandas as pd
from pandas.compat import StringIO

temp=u"""ID,Name,city,SSN,CreditCardNo
1,Joy,London,123-465-456,123456789087645
2,Sam,NewYork,765-465-457,98765434567345
3,Jhon,Paris,678-365-654,765654542345677
4,Eric,Delhi,456-888-999,123456789087645"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp))
print df
   ID  Name     city          SSN     CreditCardNo
0   1   Joy   London  123-465-456  123456789087645
1   2   Sam  NewYork  765-465-457   98765434567345
2   3  Jhon    Paris  678-365-654  765654542345677
3   4  Eric    Delhi  456-888-999  123456789087645

df.iloc[:, -2:] = 'SECRET VALUE'
print df
   ID  Name     city           SSN  CreditCardNo
0   1   Joy   London  SECRET VALUE  SECRET VALUE
1   2   Sam  NewYork  SECRET VALUE  SECRET VALUE
2   3  Jhon    Paris  SECRET VALUE  SECRET VALUE
3   4  Eric    Delhi  SECRET VALUE  SECRET VALUE

df.to_csv('file.csv', index=False)