使用动态密钥数python解析csv
我正在编写一个脚本,该脚本从使用动态密钥数python解析csv,python,Python,我正在编写一个脚本,该脚本从csv读取数据,并将其放入dict。我的数据如下: firstName lastName skill alice sparks artist mark peters sports bob stones teacher Chelsea chester sports {'firstName': ['alice', 'mark', 'bob'], '
csv
读取数据,并将其放入dict
。我的数据如下:
firstName lastName skill
alice sparks artist
mark peters sports
bob stones teacher
Chelsea
chester sports
{'firstName': ['alice', 'mark', 'bob'], 'lastName': ['sparks', 'peters', 'stones'], 'skill': ['artist', 'sports', 'teacher']}
以此类推,数据是一个csv
,这意味着在上面的示例中,空格实际上是逗号
我想将此数据解析为csv列,最终dict必须如下所示:
firstName lastName skill
alice sparks artist
mark peters sports
bob stones teacher
Chelsea
chester sports
{'firstName': ['alice', 'mark', 'bob'], 'lastName': ['sparks', 'peters', 'stones'], 'skill': ['artist', 'sports', 'teacher']}
理论上:
csv.DictReader()
和dictionary.setdefault()
代码:
输出:
DictReader()
以(标题,行[i])
的形式返回一个OrderedDictionary
数组,它是用例的完美前言。您所需要的只是一个默认项类型为list
的条件,并在遍历每一行时将附加到列表中。使用csv.DictReader()
和dictionary.setdefault()
代码:
输出:
DictReader()
以(标题,行[i])
的形式返回一个OrderedDictionary
数组,它是用例的完美前言。您所需要的只是一个默认项类型为list
和append
的条件,在您遍历每一行时将其添加到列表中。您也可以使用pandas:
# Convert DataFrame to Dictionary
df_dict = df.to_dict()
# Now convert it to list of values
for key,value in df_dict:
df_dict[key] = [value for key,value in df_dict[key].items()]
# Or you can directly use:
df_dict = df.to_dict("list")
希望这对您有所帮助:)您也可以使用熊猫:
# Convert DataFrame to Dictionary
df_dict = df.to_dict()
# Now convert it to list of values
for key,value in df_dict:
df_dict[key] = [value for key,value in df_dict[key].items()]
# Or you can directly use:
df_dict = df.to_dict("list")
希望这有帮助:)一个选项是使用熊猫数据帧的方法:
一个选项是使用数据帧的方法:
此代码还将满足所有条件,包括重复值和空值
代码:
输出:
此代码还将满足所有条件,包括重复值和空值
代码:
输出:
在标题的行中抛出一个错误,行中的项。items():
说明属性错误:“行”对象没有属性“项”
您使用了行还是行?您的语句显示了line.items()
,但错误是针对行的。如果要重命名变量,请确保按照我的示例进行一致重构。迭代应该只有2级,第一级是迭代抛出行
s,第二级是迭代遍历OrderedDictionary
项。在错误对象上尝试使用type()
,以确保所需的对象类型正确。是的,我将其重命名为line
,而不是row
粘贴时忘记交换代码行中的名称,尽管在错误消息中对其进行了更改。很抱歉,您仍然遇到相同的错误吗?什么是类型(行)
为您返回的?它是在您的实现中失败的,还是在您的用例下的我的最小示例中失败的?如果还没有,请先在您的csv
文件上尝试我的最小示例。它也适用于您提供的新数据集-我已经用结果更新了答案。它也可能源于您的csv
文件。在标题的行,行中的项中抛出一个错误。items():
声明AttributeError:“行”对象没有属性“项”
是否使用了行
或行
?您的语句显示了line.items()
,但错误是针对行的。如果要重命名变量,请确保按照我的示例进行一致重构。迭代应该只有2级,第一级是迭代抛出行
s,第二级是迭代遍历OrderedDictionary
项。在错误对象上尝试使用type()
,以确保所需的对象类型正确。是的,我将其重命名为line
,而不是row
粘贴时忘记交换代码行中的名称,尽管在错误消息中对其进行了更改。很抱歉,您仍然遇到相同的错误吗?什么是类型(行)
为您返回的?它是在您的实现中失败的,还是在您的用例下的我的最小示例中失败的?如果还没有,请先在您的csv
文件上尝试我的最小示例。它也适用于您提供的新数据集-我已经用结果更新了答案。它也可能来自您的csv
文件。
if __name__ == '__main__':
d = {}
a = []
with open('sample.csv', 'r') as readf:
enum_list = [line.rstrip('\n').split(',') for line in readf]
for i,x in enumerate(enum_list):
if i == 0:
for val in x:
d[val] = []
a.append(val)
continue
for val in x:
i = x.index(val)
if val and val not in d[a[i]]:
d[a[i]].append(val)
print(d)
{'first_name': ['alice', 'mark', 'bob', 'Chelsea', 'chester'], 'last_name': ['sparks', 'peters', 'stones'], 'skill': ['artist', 'sports', 'teacher']}