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进行操作,那么您的生活将变得更加轻松.

相关文章

转载:一文讲述Pandas库的数据读取、数据获取、数据拼接、数...
Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基...
整体流程登录天池在线编程环境导入pandas和xrld操作EXCEL文件...
 一、numpy小结             二、pandas2.1为...
1、时间偏移DateOffset对象DateOffset类似于时间差Timedelta...
1、pandas内置样式空值高亮highlight_null最大最小值高亮背景...