Python:用于比较 .csv 的标头和值、更新值的脚本

Posted

技术标签:

【中文标题】Python:用于比较 .csv 的标头和值、更新值的脚本【英文标题】:Python: Script to compare a header and a value of a .csv, update values 【发布时间】:2022-01-17 22:20:17 【问题描述】:

我得到了一个格式如下的 .csv 文件:

当我在“调色板”部分找到它时,我需要解析整个 csv 文件并将相应颜色上的 0 替换为 1。

例如,对于第一行,图像的“调色板”部分有 2 个值,“黑色”和“蓝色”。我需要用 1 替换同一行中的相应颜色(所以黑色和蓝色部分)。

任何帮助将不胜感激。

谢谢

【问题讨论】:

如果可能的话,您能否提供一个文本格式的csv文件样本。 【参考方案1】:

我有一些东西,但我不确定它会如何扩展。

测试数据框:

df = pd.DataFrame(
    "image" : ['photo1', 'photo2', 'photo3', 'photo4'],
    "palette" : ['["Black", "Blue"]', 'Yellow', 'Black', '["Yellow", "Blue"]']
)

输出:

第一步:将字符串转换为实际列表。

def wrap_eval(x):
    try:
        return eval(x)
    except:
        return [x]
    
df["palette"] = df["palette"].apply(wrap_eval)

输出;它看起来非常相似,但是如果您检查例如df.loc[0, "palatte"],您会看到我们现在有一个字符串列表,而不是恰好看起来像一个列表的字符串:

现在,我们将向下迭代行,(1) 测试每行的“调色板”列表中的每种颜色是否存在列,(2) 如果不存在,则添加列, 值一直向下为零,最后 (3) 列现在将存在,因此将此行中的值设置为 1。

for i, row in df.iterrows():
    for colour in row["palette"]:
        try:
            df[colour]             # (1) in the steps above.
        except:
            df[colour] = 0         # (2)
        finally:
            df.loc[i, colour] = 1  # (3)

【讨论】:

如果你尝试这个,请告诉我你的数据框有多少行以及需要多长时间! 非常感谢您的回答。它创造奇迹!有趣的是,我创建了第一个 .csv,并且我把所有的零。我也会解决的。您稍后添加它们的方法非常聪明。 .csv 还不是很大(200 行/15 列),所以执行是即时的。再次感谢! 它可能发生的唯一问题是调色板列中不存在一个值,所以我猜相应的颜色永远不会被创建。不过我不需要这么严格:P 你是对的,它不会。但是,如果您事先知道颜色列表,那么您可以一直使用零预先填充列(正如您所说的那样),并且代码仍然可以正常工作,我很确定。跨度>

以上是关于Python:用于比较 .csv 的标头和值、更新值的脚本的主要内容,如果未能解决你的问题,请参考以下文章

Python - 将标头写入 csv

以 Python 方式将标头添加到 csv 文件

选择具有不同标头python的csv / df中的特定列

如何使用 SSIS 将 File1 标头中的单个值与 File2 中的总行数进行比较(csv)

使用python从netcdf导出到csv时创建标头

Python Spark-如何将空 DataFrame 输出到 csv 文件(仅输出标头)?