微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python:在for循环中写入CSV,在特定列中有条件地添加值

以下是我的CSV文件内容的示例:

Fruit, colour, ripe,

apple, green,,
banana, yellow,,
pineapple, green,,
plum, purple,,

我想循环遍历CSV文件内容并根据测试(CSV数据的外部,使用提供给封闭函数的输入值),最终得到如下内容

Fruit, colour, ripe,

apple, green, true, 
banana, yellow,, 
pineapple, green,, 
plum, purple, true,

我当前的代码如下所示:

csv_data = csv.reader(open('./data/fruit_data.csv', 'r'))
for row in csv_data:
    fruit = row[0]
    if fruit == input:
    # Here, write 'true' in the 'ripe' column.

使用CSV模块或pandas可以一次性添加新数据,但在这里我需要迭代地添加数据.似乎我无法在适当的位置更改CSV文件(?),但如果我写出不同的CSV文件,它将覆盖循环中的每个匹配,因此它只会反映该值.

解决方法:

基本上,你有两种方法

1-在循环之前打开第二个文本文件,然后循环遍历初始文件的每一行,并将行追加到第二个文件.完成所有行后,关闭初始文件.示例:How do you append to a file?

2-阅读最初的csv中的所有内容.然后更改您创建的对象(强烈建议您使用Pandas).然后写出一个csv.这是该方法一个示例:

import pandas as pd
import numpy as np

# read in the csv
csv_data = pd.read_csv('./data/fruit_data.csv')

# I'm partial to the numpy where logic when creating a new column based 
# on if/then logic on an existing column
csv_data['ripe'] = np.where(csv_data['fruit']==input, True, False)

# write out the csv
csv_data.to_csv('./data/outfile.csv')

1和2之间的选择应该真正按比例缩小.如果你的csv太大了以至于你无法全部阅读并以你想要的方式操纵它,那么你应该逐行骚扰它.如果您可以阅读整个内容然后使用Pandas进行操作,那么您的生活将变得更加轻松.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐