Python迭代csv中的特定列,并替换值

时间:2017-11-13 00:09:30

标签: python-3.x csv

首先抱歉我的英语;)

我对csv文件有疑问。该文件包含很多col。有很多不同的功能。我想迭代col。 host_location获取每行的条目。对于包含(" London"或" london")的每个String,我想将字符串更改为二进制文件。因此,如果字符串包含"伦敦"或"伦敦"如果不是0,则条目应为1。

我熟悉Java,但Python对我来说是新的。

到目前为止我所知道的这个问题:

我无法直接更改csv文件,我必须阅读它,更改值并将其写回新文件。

到目前为止我的方法:

listings = io.read_csv('../data/playground/neu.csv')

def Change_into_Binaryy():
  listings.loc[listings["host_location"] == ( "London" or 
  "london"),"host_location"] = 1
  listings.to_csv("../data/playground/neu1.csv",index =False)    

代码来自另一个stackoverflow问题,到目前为止我还不熟悉Python。问题是我只能使用相等的运算符而不是java中包含的东西。

结果只有带有字符串"伦敦"的条目。或"伦敦"改为1.但也有像#34; London,Uk"我想改变

此外,我不知道如何将剩余的条目更改为0,因为我不知道如何将.loc与sth结合起来。像if / else构造

我还尝试了另一种解决方案:

def Change_into_Binary():

for x in  listings['host_location']:
    if "London" or "london" in x:
        x = 1

    else:
        x = 0

listings.to_csv("../data/playground/neu1.csv",index =False)

但也不行。在这种情况下,条目不会更改。

谢谢你的回答

1 个答案:

答案 0 :(得分:0)

from csv import DictReader, DictWriter


with open('infile.csv', 'r') as infile, open('outfile.csv', 'w') as outfile:
    reader = DictReader(infile)
    writer = DictWriter(outfile, fieldnames=reader.fieldnames)
    writer.writeheader()
    for row in reader:
        if row['host_location'].capitalize() == 'London':
            row['host_location'] = 1
        else:
            row['host_location'] = 0
        writer.writerow(row)