当前位置: 首页 > 知识库问答 >
问题:

CSV文件的格式必须如何才能使用pandas Dataframe[duplicate]中的列表数据

古彦
2023-03-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']

令人惊讶的是,当我试图从列表中的任何位置获取数据时,我得到了以下结果:

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文件必须如何格式化才能获得它?

共有1个答案

申屠项明
2023-03-14

非常感谢你@Chris,是的,你是对的@Trenton这是我要找的“来自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})

#最小安全补丁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文件中。示例列表: data [0]应该是列名,其他都是行数据 请给我建议一种方法。 问题答案: 这与模块无关紧要: 您已经具有标题作为第一行;您可以使用该方法一次性写入所有行。真的,这就是全部。

  • 问题内容: 我想将一些查询提取为CSV输出格式。不幸的是,我无法使用任何高级SQL客户端或任何语言来执行此操作。我必须使用SQLPLUS。 我该怎么做? 问题答案: 如果您使用的是12.2,则可以简单地说

  • 我想拆分JSON格式列结果在火花数据帧: Hive中的allrules_internal表: 代码: 这里我想拆分列值。从上面的例子中,我想保留“document_id,comments”部分。换句话说,条件列有一个键/值对,但我只想要值部分。 如果表中有多行,如何拆分值。

  • 我需要在我的网站上集成英里/距离搜索,我正在使用MongoDB地理空间索引,然而,我得到了一些,无法解决。下面是我使用的模式和命令... 下面是我的索引... 然而,当我在mongo shell中运行following命令时,我得到了一个错误······ 错误:

  • 问题内容: 我已经能够使用该站点上多个用户的输入来使用python创建一个csv,并希望对您的帖子表示感谢。我现在很困惑,将发表我的第一个问题。 我的input.csv看起来像这样: 我正在尝试删除“年份”列及其所有条目。从1960年到2010年,总共有40多个条目。 问题答案: 顺便说一句,循环可以删除,但并没有真正简化。 同样,您可以以直截了当的方式坚持删除列的要求。我发现这通常是一个不好的策

  • 我是python新手。我在使用csv文件时遇到问题。这是一个有12行标题的文件,在开始数据之后。我必须从列中读取一些数据(这是可以的),在详细说明之后,我必须向同一文件中添加一列,每行中都有一个值,但第一列中没有任何id,该列必须从第13行开始,而不是从第一行开始。 我试过用熊猫图书馆但不管用 其中,package是列的名称(但我也知道索引),package是字符串数组(我必须编写的元素)。这段代