【问题标题】:python dictionary to csv where each key is in seperate row and value in separate columnspython字典到csv,其中每个键位于单独的行中,值位于单独的列中
【发布时间】:2016-11-30 16:24:47
【问题描述】:

我在尝试将我的字典输出到 CSV 文件时遇到问题。我有一个字典,其中包含作为键的时间日期和作为值的与字符串格式的日期相关的公司。我尝试在网站上查找相同的问题,但这并没有真正帮助我的情况。我尝试了以下代码并设法在第一行中获取键,在第二列中获取值,但这不是我想要的。

import csv
with open('dict1.csv','w') as f:
    w = csv.writer(f,delimiter=',')
    for key,values in sorted(a.items()):
        w.writerow([key,values])

但这给了我以下格式的 CSV 文件:

2009/01/02  ['AA' 'BB' 'AAPL'] etc
2009/01/03  ['AA' 'CC' 'DD' 'FF']

因此我只有两列。但我想要:

2009/01/02  'AA' 'BB' 'AAPL'
2009/01/02  'AA' 'CC' 'DD'  'FF'

第一行有 4 个单独的列,第二行分别有 5 个。
我什至尝试过

for dates in sorted(a):
    w.writerow([date] + my_dict[date] )

但这给了我一个错误,说 + 'timestamp' 和 'str' 的操作数类型不受支持。

任何帮助将不胜感激。谢谢

【问题讨论】:

  • 在将时间戳对象附加到字符串之前尝试将其转换为字符串。您在左侧看到的日期可能不是字符串。
  • 这没有帮助。转换为字符串将所有键作为单独的列,出于某种原因,我希望我的所有键都在第一列中。

标签: python dictionary export-to-csv


【解决方案1】:

这一行将键(日期)放入键变量中,并将值作为值中的 list。所以值确实会包含类似 ['AA' 'BB' 'AAPL'] 的东西。

for key,values in sorted(a.items()):

接下来,您要告诉 writerow “写一行包含两个元素:第一个是键,第二个是值中的任何内容”(这是一个列表,因此它只是转换为字符串表示形式并像这样输出) .

    w.writerow([key,values])

所以 [key, values] 看起来像这样:

[2009/01/02, ['AA','BB','AAPL']]
 ^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^
 the key     this whole thing
             is the single value

我认为您想要的是创建一个包含键和字符串的列表,而不是包含键和字符串列表的列表。您可以使用额外的值扩展一个列表,如下所示:

    the_row = [key]  # Create the initial row with just key
    the_row.extend(values)  # Add the values, one by one, to the row
    w.writerow(the_row)  # Write the full row

list.extend(L) 作用:通过附加给定列表中的所有项目来扩展列表。

【讨论】:

  • 抱歉! extend() 不返回扩展列表,而是在适当的位置对其进行修改。稍后我会修正这个例子。
【解决方案2】:

如果我读错了,很抱歉,但是您使用的是 python pandas 吗?

" 我有一个字典,其中包含作为键的 pandas 时间日期和值,>与字符串格式的日期有关的公司。"

在这种情况下,这样的事情可能会起作用

import pandas as pd
df = pd.DataFrame(mydict)
df = df.transpose()
df.to_csv('dict1.csv',encoding='utf-8')

to_csv 方法默认使用 ',' 作为分隔符,您可以根据需要进行更改。

【讨论】:

  • 不抱歉。日期在 datetime 对象中。不是熊猫。我会改变我的措辞。
【解决方案3】:

你可能需要这样写:

for key,values in sorted(a.items()):
    w.writerow(str(key) + "," + ","join(values))

",".join(values) 会将值列表拆分为以逗号分隔的字符串。我假设您想要用逗号分隔列,因为您正在编写一个 csv 文件,即使在您的示例中列是由制表符分隔的。

【讨论】:

  • 对不起,与我的键对应的每个值都是由公司代码分隔的列表。它们用逗号分隔。但在我输出到 excel 文件中,这就是它输出的格式,这很奇怪。我尝试了你的方法,但我也得到了“,”作为一列,这不是我想要的
猜你喜欢
  • 2016-09-15
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
  • 2018-07-13
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 2019-07-10
相关资源
最近更新 更多