【问题标题】:Write dictionary values to csv python将字典值写入csv python
【发布时间】:2018-06-17 04:15:11
【问题描述】:

我有字典,

d = [{
       'id': 1
       'a' : [11,12],
       'b' : [25,17],
       'c' : [13,18] 
}]

这里我想用列标题作为键(id、a、b、c)在 csv 中写入 和值作为行。 在这里我想写第一行的值(1,11,25,13)和键(id,a,b,c) 第二行的值 (1,12,17,18) 具有相同的键,两行的 id 相同。 这意味着如果我的值有两个以上的值,则需要将其写入下一行的 csv 中,并具有相同的列标题和相同的 id。

我正在尝试这样的事情

CSV ="\n".join([k+','+",".join(v) for k,v in dict_data[0].items()])
print CSV

但同样,列以行的形式出现, .csv 文件 id,1,(无值,我这里需要1)----这里不会出现id 一,11,12 b,25,17 他们以行的形式出现,我想要 id,a b 作为列

【问题讨论】:

  • 你的代码在哪里?
  • 您的id 密钥将始终是int,还是也可以是list 对象?您的数据的规律性如何?
  • 您可以使用字符串操作来编写.csv,或者使用诸如pandas之类的库,该库具有编写.csv文件的方法,对应于您的数据(当然,您需要根据pandas 格式化数据)。
  • 您是否尝试“转置”输入数据并使用csv 库?

标签: python csv dictionary


【解决方案1】:

我认为 Pandas DataFrame 是您的最佳选择。我也稍微修改了您的数据以将 id 列作为列表 -

d = {
       'id': [1],
       'a' : [11,12,13],
       'b' : [25,17],
       'c' : [13,18] 
}

import pandas as pd
df = pd.DataFrame.from_dict(d,orient='index').transpose()
df = df.fillna(method='ffill')
print(df)

最后,只需将其输出到 csv df.to_csv('output.csv', index=False)

输出 -

id     a     b     c
0  1.0  11.0  25.0  13.0
1  1.0  12.0  17.0  18.0
2  1.0  13.0  17.0  18.0

它首先创建一个带有 NA 缺失值的数据框,然后将这些 NA 值替换为上一行中的值。

【讨论】:

  • 列表没有属性值这是我得到的
【解决方案2】:

您可以将DataFrame 构造函数与DataFrame.to_csv 一起使用:

import pandas as pd

df = pd.DataFrame(d[0], columns=['id','a','b','c'])
print (df)
   id   a   b   c
0   1  11  25  13
1   1  12  17  18

然后:

df.to_csv(file, index=False)

大家一起:

pd.DataFrame(d[0], columns=['id','a','b','c']).to_csv(file, index_col=False)

【讨论】:

  • 嘿,值也可以是字符串。
  • 使用我得到的代码时出错是数组必须都是相同的长度
  • 问题是样本数据还是真实数据字典?
【解决方案3】:

在将id 转换为list 后,尝试from_dict 创建pandas 的数据框:

import pandas as pd
d = [{ 'id': 1,
       'a' : [11,12],
       'b' : [25,17],
       'c' : [13,18] }]

# d['id'] = [d['id']] * len(d['a'])  # no need for this line; kept only because it is discussed in comments
df = pd.DataFrame.from_dict(d[0])  # if dict is in a list, use d[0]
print(df)

输出:

    a   b   c  id
0  11  25  13   1
1  12  17  18   1

写入 csv 文件:

df.to_csv("out.csv", index=False)

【讨论】:

  • 嘿,首先值可以是字符串。
  • 不,它仍然可以工作:["5"] * 5 产生 ['5', '5', '5', '5', '5']。列表项是重复的,而不是算术相乘的。
  • 其实这个代码语句是不需要的。即使省略此语句,输出也保持不变。
  • 谢谢您的回复。是的字典是列表,我使用了 index[0] 但有错误的数组必须都是相同的长度
  • 对我来说没问题。 “1”后面应该有逗号。
猜你喜欢
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 2012-11-04
  • 2018-03-19
  • 2016-03-01
  • 2015-06-06
  • 2018-07-25
  • 2019-02-19
相关资源
最近更新 更多