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 的标头和值、更新值的脚本的主要内容,如果未能解决你的问题,请参考以下文章