必须如何格式化 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() 可以在同一列中应用不同的日期格式!这是一个已知的错误吗?如何解决?