【问题标题】:Create a pandas DataFrame from a csv stacked file从 csv 堆叠文件创建 pandas DataFrame
【发布时间】:2012-08-28 08:17:10
【问题描述】:

我想从以下 csv 文件创建一个 pandas DataFrame:

...........
EUR MS 3M;20111025;7d;1.1510;
EUR MS 3M;20111024;7d;1.1530;
EUR MS 3M;20111025;1m;1.1580;
EUR MS 3M;20111024;1m;1.1590;
...........

理想情况下,DataFrame 将具有作为第一列值(“EUR MS 3M”)的名称,由第二列中的值组成的索引(“20111025”),以及 DataFrame 的列名将被采用的位置来自第三列(“7d”、“1m”等),对应的值在最后一个 csv 列(“1.150”等)中给出。 我尝试了不同的方法,但无法以正确的方式解决这个问题。我认为我应该做的第一件事应该是“取消堆叠”csv中的值,以便首先获得对齐的索引,然后创建一个DataFrame,但真的不... 比我更专业的人有什么线索吗?几周前我才开始学习熊猫... 感谢您的热心帮助!

(我正在编辑问题以使事情更清楚: 我想获得一个名为 EUR MS 3M 的数据框,其中包含以下列:

index    7d     1m 
20111024 1.1530 1.1590 
20111025 1.1510 1.1580 

希望现在更清楚一点。谢谢)

【问题讨论】:

  • 你能写一个你想要的例子吗,我对你想要的列和条目感到困惑。 (是不是你想成为 EUR 的变量名...,有不同的条目吗?)
  • 我编辑了我上面的问题,让它更清楚:)

标签: python csv dataframe pandas


【解决方案1】:

这样的事情怎么样:

In [103]: print data
EUR MS 3M;20111025;7d;1.1510
EUR MS 3M;20111024;7d;1.1530
EUR MS 3M;20111025;1m;1.1580
EUR MS 3M;20111024;1m;1.1590

In [104]: frame = pd.read_csv(StringIO(data), sep=';', 
                              names=['frame_name', 'index', 'column', 'value'])
In [105]: name = frame.ix[0, 'frame_name']

In [106]: rs = frame.ix[:, 1:].pivot('index', 'column', 'value')

In [107]: rs.name = name

In [108]: rs
Out[108]:
column       1m     7d
index
20111024  1.159  1.153
20111025  1.158  1.151

【讨论】:

  • 在 Python 3 中您需要导入 io 然后转到 io.StringIO
猜你喜欢
  • 1970-01-01
  • 2017-10-04
  • 1970-01-01
  • 2018-03-26
  • 2018-04-12
  • 1970-01-01
  • 2018-11-07
  • 2019-07-08
  • 2018-02-12
相关资源
最近更新 更多