必须如何格式化 CSV 文件才能在 pandas Dataframe 中使用列表数据 [重复]

Posted

技术标签:

【中文标题】必须如何格式化 CSV 文件才能在 pandas Dataframe 中使用列表数据 [重复]【英文标题】:How a CSV file must be format to use list data in pandas Dataframe [duplicate] 【发布时间】:2020-11-11 03:56:14 【问题描述】:

我的 KBs.csv 文件:

OS Version,Patch
Server 2019,"['KB4523205', 'KB4519569', 'KB4503308']"

然后我读了它:

import pandas as pd
df = pd.read_csv('KBs.csv')
df
OS Version  Patch
0   Server 2019 ['KB4523205', 'KB4519569', 'KB4503308']

令人惊讶的是,当我尝试从列表中的任何位置获取数据时,Y 得到了这个:

df['Patch'][0][0]
OUT : '['

如果我尝试手动构建日期框:

dfeo = pd.DataFrame('OS Version': ['Server 2019'],'Patch': [['KB4523205','KB4519569','KB4503308']])
dfeo
OS Version  Patch
0   Server 2019 [KB4523205, KB4519569, KB4503308]

dfeo['Patch'][0][0]

OUT : 'KB4523205'

这是我正在寻找的行为,csv文件必须如何格式化才能得到它?

【问题讨论】:

from ast import literal_eval 然后df.Patch = df.Patch.apply(literal_eval) from ast import literal_eval 然后df = pd.read_csv('KBs.csv', converters='Patch': literal_eval) 更好。 两个重复项之间的区别在于,@Chris 发布的 dup 中的列表值不在引号中。我发布的 dup 中的列表值确实有引号,因此 literal_eval 是比字符串切片和拆分更好的解决方案。 【参考方案1】:

非常感谢@Chris,是的,你是对的@Trenton 这是我在寻找“from ast import literal_eval”

这是完整的代码,它检查了 Windows sysop 上线所需的最小补丁

import pandas as pd
from ast import literal_eval
df = pd.read_csv('KBs.csv', converters='Patch': literal_eval)

#Minimal 安全补丁 2020

w2012 = ['KB4534288', 'KB4537794', 'KB4540694', 'KB4550971', 'KB4556852', 'KB4561674', 'KB4565535']
w2012R2 = ['KB4534309', 'KB4537803', 'KB4541505', 'KB4550970', 'KB4556853', 'KB4561673', 'KB4565540']
w2016 = ['KB4534271', 'KB4537764', 'KB4540670', 'KB4550929', 'KB4556813', 'KB4561616', 'KB4565511']
w2019 = ['KB4561608', 'KB4558998' ]

#“操作系统版本”列的链接

 d = 'Server 2019': w2019, 'Server 2016': w2016, 'Server 2012 R2': w2012R2, 'Server 2012': w2012

#比较

for k, v in d.items():      
m = df['OS Version'].eq(k)
df.loc[m, 'NoPatch'] =  df.loc[m, 'Patch'].apply(lambda x: list(set(v) - set(x)))
df


Enterprise  Service     Host        OS Version  Patch                    NoPatch
0   Toto    Marketing   consolamig  Server 2019 [KB4523205, KB4519569, KB4503308, KB4499728, K...   [KB4558998, KB4561608]
1   Toto    Marketing   dc01       Server 2016  [KB4525236, KB4485447, KB4520724, KB3192137, K...   [KB4540670, KB4561616, KB4537764, KB4534271, K...
2   Toto    Marketing   duedil01    Server 2012 R2  [KB2920189, KB3103616, KB3045755, KB3161949, K...   [KB4565540, KB4556853, KB4541505, KB4550970, K...
3   Toto    Marketing   win-4ea3    Server 2012 R2  [KB2939471, KB2919355, KB2938772, KB2999226, K...   [KB4565540, KB4556853, KB4541505, KB4550970, K...

再次感谢

【讨论】:

以上是关于必须如何格式化 CSV 文件才能在 pandas Dataframe 中使用列表数据 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 pandas 的情况下读取、格式化、排序和保存 csv 文件

如何使用 python 和 pandas 将 Csv 文件转换为 libsvm?

pandas.read_csv() 可以在同一列中应用不同的日期格式!这是一个已知的错误吗?如何解决?

如何在 python 中使用 matplotlib 和 pandas 绘制 CSV 数据

pandas,如何合并多个相同列的csv文件

pandas,如何合并多个相同列的csv文件